# Bibliotecas
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
Fontes de recursos no financiamento imobiliário¶
Sistema Brasileiro de Poupança e Empréstimo¶
Estoque em bilhões de R$
# Ler o arquivo CSV referente ao SBPE com ponto e vírgula como delimitador
sbpe = pd.read_csv('sbpe.csv', delimiter=';', skipinitialspace=True)
# Definir DateTime como índice
sbpe.set_index('DateTime', inplace=True, drop=True)
Títulos¶
Estoque em bilhões de R$
# Ler o arquivo CSV referente aos Títulos com ponto e vírgula como delimitador
titulos = pd.read_csv('titulos.csv', delimiter=';', skipinitialspace=True)
# Definir DateTime como índice
titulos.set_index('DateTime', inplace=True, drop=True)
Recursos¶
# Merge dos DataFrames sbpe e titulos
recursos = pd.merge(sbpe, titulos, how='inner', on='DateTime')
# Converter indice para datetime
recursos.index = pd.to_datetime(recursos.index)
# Converter colunas para float
recursos = recursos.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(recursos.info())
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 SBPE 109 non-null float64 1 LCI 109 non-null float64 2 CRI 109 non-null float64 3 LIG 54 non-null float64 4 LH 102 non-null float64 dtypes: float64(5) memory usage: 5.1 KB None
# Imprime as primeiras linhas do DataFrame
print(recursos.head())
SBPE LCI CRI LIG LH DateTime 2014-04-30 480.464917 114.102520 41.097931 NaN 1.304882 2014-05-31 485.037160 117.295887 40.795547 NaN 1.366089 2014-06-30 490.241090 119.665808 41.789186 NaN 1.413620 2014-07-31 495.725874 123.616931 42.046400 NaN 1.494045 2014-08-31 499.480830 127.289442 44.153062 NaN 1.457436
# Imprime as últimas linhas do DataFrame
print(recursos.tail())
SBPE LCI CRI LIG LH DateTime 2022-12-31 763.815067 238.693857 149.503759 88.571039 0.419768 2023-01-31 742.330203 248.385659 146.949612 90.985688 0.604349 2023-02-28 739.139471 259.435344 147.917429 93.199152 0.599259 2023-03-31 737.677102 275.533657 150.436542 95.317432 0.842265 2023-04-30 737.381942 284.425993 151.744832 97.786173 1.011370
recursos.describe()
| SBPE | LCI | CRI | LIG | LH | |
|---|---|---|---|---|---|
| count | 109.000000 | 109.000000 | 109.000000 | 54.000000 | 102.000000 |
| mean | 622.113425 | 164.422881 | 79.217958 | 34.803963 | 0.958290 |
| std | 114.726873 | 34.003273 | 25.957792 | 29.890667 | 0.351409 |
| min | 480.464917 | 114.102520 | 40.795547 | 0.177202 | 0.018120 |
| 25% | 510.620427 | 137.750671 | 65.419271 | 11.308063 | 0.925513 |
| 50% | 599.508867 | 165.544869 | 73.005338 | 21.926618 | 1.061776 |
| 75% | 757.535898 | 183.879294 | 81.616554 | 56.932670 | 1.116405 |
| max | 801.437986 | 284.425993 | 151.744832 | 97.786173 | 1.494045 |
def calcula_estat(column):
return pd.Series({
'Média': column.mean(),
'Mediana': column.median(),
'Moda': column.mode()[0] if not column.mode().empty else None,
'Desvio Padrão (populacional)': column.std(ddof=0),
'Desvio Padrão (amostral)': column.std(),
'Variância (populacional)': column.var(ddof=0),
'Variância (amostral)': column.var(),
'Coeficiente de Variação': (column.std() / column.mean()) * 100 if column.mean() != 0 else 0
})
estatisticas_recursos = recursos.select_dtypes(include=['float64']).apply(calcula_estat)
estatisticas_recursos
| SBPE | LCI | CRI | LIG | LH | |
|---|---|---|---|---|---|
| Média | 622.113425 | 164.422881 | 79.217958 | 34.803963 | 0.958290 |
| Mediana | 599.508867 | 165.544869 | 73.005338 | 21.926618 | 1.061776 |
| Moda | 480.464917 | 114.102520 | 40.795547 | 0.177202 | 0.018120 |
| Desvio Padrão (populacional) | 114.199390 | 33.846935 | 25.838445 | 29.612609 | 0.349682 |
| Desvio Padrão (amostral) | 114.726873 | 34.003273 | 25.957792 | 29.890667 | 0.351409 |
| Variância (populacional) | 13041.500676 | 1145.615013 | 667.625231 | 876.906583 | 0.122277 |
| Variância (amostral) | 13162.255312 | 1156.222560 | 673.806946 | 893.451991 | 0.123488 |
| Coeficiente de Variação | 18.441472 | 20.680378 | 32.767560 | 85.882941 | 36.670371 |
siglas = ["Sistema Brasileiro de Poupança e Empréstimo",
"Letra de Crédito Imobiliário",
"Certificados de Recebíveis Imobiliários",
"Letra Imobiliária Garantida",
"Letras Hipotecárias"]
fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))
for i, column in enumerate(recursos.columns):
recursos.boxplot(column=column, ax=axes[i], grid=False)
# Defina as siglas como título de cada boxplot
axes[i].set_title(siglas[i], fontsize=11)
# Adiciona título geral
fig.suptitle('SBPE e Títulos\n', fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
# Heatmap do Seaborn
correlacao_recursos = sns.heatmap(recursos.corr(), annot=True, cmap='Purples')
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 6))
# Iterar pelas colunas e plotar cada uma separadamente
for coluna in recursos.columns:
plt.plot(recursos.index, recursos[coluna], marker='o', linestyle='-', label=coluna)
plt.title('Tendência Temporal dos Recursos', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Recursos em Bilhões (R$)', fontsize='14')
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75)) # Adicionar uma legenda para as séries
plt.show()
Direcionamento¶
Aplicações em créditos imobiliários de parte dos recursos de caderneta de poupança e depósitos à vista captados pelas instituições financeiras
Aplicação¶
Estoque em bilhões de R$
# Ler o arquivo CSV com ponto e vírgula como delimitador
direcionamento_aplicacao = pd.read_csv('direcionamento_aplicacao.csv', delimiter=';', skipinitialspace=True)
# Definir DateTime como índice
direcionamento_aplicacao.set_index('DateTime', inplace=True, drop=True)
# Renomear as colunas
direcionamento_aplicacao.rename(columns={'Imobiliário': 'Direcionamento_Aplicacao'}, inplace=True)
Aquisição¶
Estoque em bilhões de R$
# Ler o arquivo CSV com ponto e vírgula como delimitador
direcionamento_aquisicao = pd.read_csv('direcionamento_aquisicao.csv', delimiter=';', skipinitialspace=True)
# Definir DateTime como índice
direcionamento_aquisicao.set_index('DateTime', inplace=True, drop=True)
# Renomear as colunas
direcionamento_aquisicao.rename(columns={'Imobiliário': 'Direcionamento_Aquisicao'}, inplace=True)
Construção¶
Estoque em bilhões de R$
# Ler o arquivo CSV com ponto e vírgula como delimitador
direcionamento_construcao = pd.read_csv('direcionamento_construcao.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
direcionamento_construcao.set_index('DateTime', inplace=True, drop=True)
# Renomear as colunas
direcionamento_construcao.rename(columns={'Imobiliário': 'Direcionamento_Construcao'}, inplace=True)
Reforma ou Aplicação¶
Estoque em bilhões de R$
# Ler o arquivo CSV com ponto e vírgula como delimitador
direcionamento_reforma_ampliacao = pd.read_csv('direcionamento_reforma_ampliacao.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
direcionamento_reforma_ampliacao.set_index('DateTime', inplace=True, drop=True)
# Renomear as colunas
direcionamento_reforma_ampliacao.rename(columns={'Imobiliário': 'Direcionamento_Reforma_Ampliacao'}, inplace=True)
Direcionamento¶
# Concatenar os DataFrames
direcionamento = pd.concat([direcionamento_aplicacao, direcionamento_aquisicao, direcionamento_construcao, direcionamento_reforma_ampliacao], axis=1)
# Remover as duas últimas linhas
direcionamento = direcionamento.iloc[:-2]
# Converter indice para datetime
direcionamento.index = pd.to_datetime(direcionamento.index)
# Converter colunas para float
direcionamento = direcionamento.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(direcionamento.info())
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Direcionamento_Aplicacao 109 non-null float64 1 Direcionamento_Aquisicao 109 non-null float64 2 Direcionamento_Construcao 109 non-null float64 3 Direcionamento_Reforma_Ampliacao 52 non-null float64 dtypes: float64(4) memory usage: 4.3 KB None
# Imprime as primeiras linhas do DataFrame
print(direcionamento.head())
Direcionamento_Aplicacao Direcionamento_Aquisicao \
DateTime
2014-04-30 325.585144 270.757417
2014-05-31 331.349084 278.111884
2014-06-30 335.319843 284.820495
2014-07-31 340.292474 291.964138
2014-08-31 343.962417 298.685639
Direcionamento_Construcao Direcionamento_Reforma_Ampliacao
DateTime
2014-04-30 19.255190 NaN
2014-05-31 19.592862 NaN
2014-06-30 19.925202 NaN
2014-07-31 20.317443 NaN
2014-08-31 20.702543 NaN
# Imprime as últimas linhas do DataFrame
print(direcionamento.tail())
Direcionamento_Aplicacao Direcionamento_Aquisicao \
DateTime
2022-12-31 592.956933 851.185827
2023-01-31 587.325492 857.959501
2023-02-28 581.305567 863.790442
2023-03-31 573.385644 871.826639
2023-04-30 568.977065 876.639352
Direcionamento_Construcao Direcionamento_Reforma_Ampliacao
DateTime
2022-12-31 78.964214 580.793643
2023-01-31 80.003929 594.587095
2023-02-28 80.929094 595.874873
2023-03-31 82.041950 600.017655
2023-04-30 82.898815 603.099518
direcionamento.describe()
| Direcionamento_Aplicacao | Direcionamento_Aquisicao | Direcionamento_Construcao | Direcionamento_Reforma_Ampliacao | |
|---|---|---|---|---|
| count | 109.000000 | 109.000000 | 109.000000 | 52.000000 |
| mean | 464.025662 | 533.736825 | 42.947682 | 564.759796 |
| std | 81.798012 | 168.306809 | 17.347505 | 41.636823 |
| min | 325.585144 | 270.757417 | 19.255190 | 512.119403 |
| 25% | 387.192224 | 393.501215 | 29.165905 | 528.116359 |
| 50% | 452.574064 | 485.512991 | 36.337262 | 555.566737 |
| 75% | 516.834464 | 652.302756 | 53.741841 | 600.540329 |
| max | 618.514193 | 876.639352 | 82.898815 | 645.239690 |
categorias = ['Aplicação', 'Aquisição', 'Construção', 'Reforma/Ampliação']
estatisticas_direcionamento = direcionamento.select_dtypes(include=['float64']).apply(calcula_estat)
estatisticas_direcionamento.columns = categorias
print(estatisticas_direcionamento)
Aplicação Aquisição Construção \
Média 464.025662 533.736825 42.947682
Mediana 452.574064 485.512991 36.337262
Moda 325.585144 270.757417 19.255190
Desvio Padrão (populacional) 81.421927 167.532981 17.267746
Desvio Padrão (amostral) 81.798012 168.306809 17.347505
Variância (populacional) 6629.530150 28067.299692 298.175066
Variância (amostral) 6690.914689 28327.182097 300.935946
Coeficiente de Variação 17.627907 31.533670 40.392181
Reforma/Ampliação
Média 564.759796
Mediana 555.566737
Moda 512.119403
Desvio Padrão (populacional) 41.234525
Desvio Padrão (amostral) 41.636823
Variância (populacional) 1700.286065
Variância (amostral) 1733.625008
Coeficiente de Variação 7.372483
categorias = ["Aplicação", "Aquisição", "Construção", "Reforma ou Ampliação"]
fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
for i, column in enumerate(direcionamento.columns):
direcionamento.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=12)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=12)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione título geral
fig.suptitle('Direcionamento do Crédito Imobiliário\n', fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
categorias = ["Aplicação", "Aquisição", "Construção", "Reforma ou Ampliação"]
# Gerar a matriz de correlação e o gráfico de calor
correlacao = sns.heatmap(direcionamento.corr(), annot=True, cmap='Purples')
# Definir os rótulos dos eixos x e y usando as categorias
correlacao.set_xticklabels(categorias, rotation=45)
correlacao.set_yticklabels(categorias, rotation=0)
plt.show()
categorias = ["Aplicação", "Aquisição", "Construção", "Reforma ou Ampliação"]
plt.figure(figsize=(12, 6))
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(direcionamento.columns):
plt.plot(direcionamento.index, direcionamento[coluna], marker='o', linestyle='-', label=categorias[i])
plt.title('Tendência Temporal dos Direcionamentos', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Direcionamento em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75), title='Categorias') # Adicionar uma legenda para as séries com título
plt.show()
Contábil¶
Operações de crédito destinadas à construção, reforma, ampliação e aquisição de unidades residenciais e comerciais
Financiamentos¶
Estoque em bilhões de R$
# Ler o arquivo CSV com ponto e vírgula como delimitador
financiamentos = pd.read_csv('financiamentos.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
financiamentos.set_index('DateTime', inplace=True, drop=True)
# Renomear as colunas
financiamentos.columns = ['Financiamento_'+str(col) for col in financiamentos.columns]
BNDU¶
Estoque em bilhões de R$
# Ler o arquivo CSV com ponto e vírgula como delimitador
bndu = pd.read_csv('bndu.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
bndu.set_index('DateTime', inplace=True, drop=True)
# Adiciona "BNDU_" ao início do nome da coluna
bndu.columns = ['BNDU_'+str(col) for col in bndu.columns]
Contábil¶
# Merge dos DataFrames financiamentos e bndu
contabil = pd.merge(financiamentos, bndu, how='inner', on='DateTime')
# Converter indice para datetime
contabil.index = pd.to_datetime(contabil.index)
# Converter colunas para float
contabil = contabil.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(contabil.info())
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 81 entries, 2014-04-30 to 2020-12-31 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Financiamento_Comercial 81 non-null float64 1 Financiamento_Residencial 81 non-null float64 2 BNDU_Imobiliário 81 non-null float64 dtypes: float64(3) memory usage: 2.5 KB None
# Imprime as primeiras linhas do DataFrame
print(contabil.head())
Financiamento_Comercial Financiamento_Residencial \
DateTime
2014-04-30 1.368902 40.828622
2014-05-31 1.413339 41.847728
2014-06-30 1.470170 42.764978
2014-07-31 1.511468 43.669303
2014-08-31 1.558890 44.566210
BNDU_Imobiliário
DateTime
2014-04-30 0.446703
2014-05-31 0.458711
2014-06-30 0.496314
2014-07-31 0.487761
2014-08-31 0.502069
# Imprime as últimas linhas do DataFrame
print(contabil.tail())
Financiamento_Comercial Financiamento_Residencial \
DateTime
2020-08-31 1.382031 69.958903
2020-09-30 1.340438 70.671578
2020-10-31 1.329268 71.434701
2020-11-30 1.328123 72.217301
2020-12-31 1.292407 73.093299
BNDU_Imobiliário
DateTime
2020-08-31 2.065149
2020-09-30 2.013951
2020-10-31 1.976665
2020-11-30 1.927985
2020-12-31 1.884214
contabil.describe()
| Financiamento_Comercial | Financiamento_Residencial | BNDU_Imobiliário | |
|---|---|---|---|
| count | 81.000000 | 81.000000 | 81.000000 |
| mean | 2.038938 | 58.558148 | 1.428824 |
| std | 0.435597 | 7.320291 | 0.673562 |
| min | 1.292407 | 40.828622 | 0.446703 |
| 25% | 1.678244 | 55.039825 | 0.773178 |
| 50% | 2.092106 | 59.705846 | 1.414289 |
| 75% | 2.403230 | 63.103329 | 2.077428 |
| max | 2.725520 | 73.093299 | 2.374602 |
categorias = ['Comercial', 'Residencial', 'BNDU']
# Aplicar a função calcula_estat para cada coluna do DataFrame
estatisticas_contabil = contabil.select_dtypes(include=['float64']).apply(calcula_estat)
# Renomear as colunas
estatisticas_contabil.columns = categorias
print(estatisticas_contabil)
Comercial Residencial BNDU Média 2.038938 58.558148 1.428824 Mediana 2.092106 59.705846 1.414289 Moda 1.292407 40.828622 0.446703 Desvio Padrão (populacional) 0.432900 7.274964 0.669391 Desvio Padrão (amostral) 0.435597 7.320291 0.673562 Variância (populacional) 0.187403 52.925097 0.448084 Variância (amostral) 0.189745 53.586661 0.453685 Coeficiente de Variação 21.363939 12.500892 47.140969
categorias = ["Financiamento Comercial", "Financiamento Residencial", "Bens não de uso próprio (BNDU)"]
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))
for i, column in enumerate(contabil.columns):
contabil.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Contábil", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
categorias = ["Financiamento Comercial", "Financiamento Residencial", "BNDU"]
matriz_correlacao = contabil.corr()
# Gerar a matriz de correlação e o gráfico de calor
correlacao = sns.heatmap(matriz_correlacao, annot=True, cmap='Blues')
# Definir os rótulos dos eixos x e y usando as categorias
correlacao.set_xticklabels(categorias, rotation=45)
correlacao.set_yticklabels(categorias, rotation=0)
plt.show()
categorias = ["Financiamento Comercial", "Financiamento Residencial", "BNDU"]
plt.figure(figsize=(12, 6))
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(contabil.columns):
plt.plot(contabil.index, contabil[coluna], marker='o', linestyle='-', label=categorias[i])
plt.title('Tendência Temporal Contábil', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Contábil em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75), title='Categorias') # Adicionar uma legenda para as séries com título
plt.show()
Crédito¶
Detalhamento das operações de crédito
Contratação PF¶
Estoque em bilhões de R$
# Contratação Pessoa Física
# Ler o arquivo CSV referente ao Valor contratado Pessoa Física com ponto e vírgula como delimitador
valor_contratado_pf = pd.read_csv('credito_valor_contratado.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
valor_contratado_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
valor_contratado_pf.index = pd.to_datetime(valor_contratado_pf.index)
# Adiciona VC ao início do nome das colunas
valor_contratado_pf.columns = ['VC_' + col for col in valor_contratado_pf.columns]
# Converter colunas para float
valor_contratado_pf = valor_contratado_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(valor_contratado_pf.describe())
VC_Comercial VC_Home Equity VC_Livre VC_FGTS VC_SFH count 109.000000 109.000000 109.000000 109.000000 109.000000 mean 0.045081 0.283976 1.228455 3.737707 5.664324 std 0.018357 0.107388 0.729525 0.812380 3.358593 min 0.020811 0.116334 0.337581 1.251692 1.636985 25% 0.030833 0.202534 0.536086 3.265453 2.742686 50% 0.039920 0.256085 0.853415 3.776545 5.011176 75% 0.057055 0.362983 1.906154 4.201706 8.663919 max 0.117132 0.557333 2.600636 6.554291 13.960927
categorias = [coluna.replace('VC_', '') for coluna in valor_contratado_pf.columns]
fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))
for i, column in enumerate(valor_contratado_pf.columns):
valor_contratado_pf.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Crédito - Contratação \n Pessoa Física", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = valor_contratado_pf.columns.str.replace('VC_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(valor_contratado_pf.columns):
plt.plot(valor_contratado_pf.index, valor_contratado_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Crédito \n Valor Contratado - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Valor Contratado em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Indexadores PF¶
Estoque em bilhões de R$
# Ler o arquivo CSV referente aos Indexadores com ponto e vírgula como delimitador
credito_indexadores_pf = pd.read_csv('credito_indexadores.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
credito_indexadores_pf.set_index('DateTime', inplace=True, drop=True)
# Adiciona Credito_ ao início do nome das colunas
credito_indexadores_pf.columns = ['Credito_' + col for col in credito_indexadores_pf.columns]
# Converter colunas para float
credito_indexadores_pf = credito_indexadores_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Converter indice para datetime
credito_indexadores_pf.index = pd.to_datetime(credito_indexadores_pf.index)
# Imprime as informações do DataFrame
print(credito_indexadores_pf.describe())
Credito_Prefixado Credito_IPCA Credito_Outros Credito_TR count 109.000000 90.000000 109.000000 109.000000 mean 0.155869 0.251044 0.278462 10.317928 std 0.070689 0.358097 0.484350 3.552447 min 0.057700 0.000044 0.013971 5.203805 25% 0.110401 0.008544 0.031111 7.511628 50% 0.142909 0.024560 0.048687 8.999376 75% 0.194210 0.369564 0.276183 12.886314 max 0.489120 1.226288 2.953069 18.618034
categorias = ['Prefixado', 'IPCA', 'Outros', 'TR']
fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
for i, column in enumerate(credito_indexadores_pf.columns):
credito_indexadores_pf.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Crédito - Indexadores \n Pessoa Física", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = credito_indexadores_pf.columns.str.replace('Credito_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(credito_indexadores_pf.columns):
plt.plot(credito_indexadores_pf.index, credito_indexadores_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Crédito \n Indexadores - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Indexadores em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Taxa PF¶
Porcentagem ao ano
# Ler o arquivo CSV referente às Taxas com ponto e vírgula como delimitador
credito_taxa_pf = pd.read_csv('credito_taxa.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
credito_taxa_pf.set_index('DateTime', inplace=True, drop=True)
# Adiciona Credito_Taxa_ ao início do nome das colunas
credito_taxa_pf.columns = ['Credito_Taxa_' + col for col in credito_taxa_pf.columns]
# Converter colunas para float
credito_taxa_pf = credito_taxa_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Converter indice para datetime
credito_taxa_pf.index = pd.to_datetime(credito_taxa_pf.index)
# Imprime as informações do DataFrame
print(credito_taxa_pf.describe())
Credito_Taxa_SFH Credito_Taxa_FGTS Credito_Taxa_Livre \
count 109.000000 109.000000 109.000000
mean 9.849541 6.657156 10.027890
std 1.658367 1.048578 2.058505
min 7.120000 5.410000 7.160000
25% 8.890000 5.990000 8.410000
50% 9.460000 6.120000 9.550000
75% 11.260000 7.480000 11.750000
max 13.180000 9.320000 14.590000
Credito_Taxa_Comercial Credito_Taxa_Home Equity
count 109.000000 109.000000
mean 11.784954 18.006055
std 1.798308 3.230563
min 9.160000 12.330000
25% 10.150000 15.740000
50% 11.700000 17.630000
75% 13.040000 19.690000
max 15.950000 24.530000
categorias = ['SFH', 'FGTS', 'Livre', 'Comercial', 'Home Equity']
fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))
for i, column in enumerate(credito_taxa_pf.columns):
credito_taxa_pf.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Crédito - Taxa \n Pessoa Física\n", fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = credito_taxa_pf.columns.str.replace('Credito_Taxa_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(credito_taxa_pf .columns):
plt.plot(credito_taxa_pf.index, credito_taxa_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Crédito \n Taxa - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Taxa em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Loan to Value (LTV) PF¶
Porcentagem
# Ler o arquivo CSV referente ao Loan to Value (LTV) com ponto e vírgula como delimitador
credito_ltv_pf = pd.read_csv('credito_ltv.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
credito_ltv_pf.set_index('DateTime', inplace=True, drop=True)
# Adiciona Credito_LTV_ ao início do nome das colunas
credito_ltv_pf.columns = ['Credito_LTV_' + col for col in credito_ltv_pf.columns]
# Converter colunas para float
credito_ltv_pf = credito_ltv_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Converter indice para datetime
credito_ltv_pf.index = pd.to_datetime(credito_ltv_pf.index)
# Imprime as informações do DataFrame
print(credito_ltv_pf.describe())
Credito_LTV_SFH Credito_LTV_FGTS Credito_LTV_Livre \
count 109.000000 109.000000 109.000000
mean 66.972844 74.440367 59.561651
std 3.033744 2.191687 3.317696
min 58.940000 71.040000 47.360000
25% 64.300000 72.860000 56.970000
50% 66.920000 73.650000 60.140000
75% 68.800000 76.050000 62.560000
max 74.080000 78.930000 64.590000
Credito_LTV_Comercial Credito_LTV_Home Equity
count 109.000000 109.000000
mean 60.233486 45.578257
std 3.389893 5.013987
min 45.170000 38.930000
25% 58.330000 42.190000
50% 59.840000 44.360000
75% 62.440000 48.240000
max 68.670000 72.910000
categorias = ['SFH', 'FGTS', 'Livre', 'Comercial', 'Home Equity']
# Aplicar a função calcula_estat para cada coluna do DataFrame
estatisticas_credito_ltv_pf = credito_ltv_pf.select_dtypes(include=['float64']).apply(calcula_estat)
# Renoemar as colunas
estatisticas_credito_ltv_pf.columns = categorias
print(estatisticas_credito_ltv_pf)
SFH FGTS Livre Comercial \
Média 66.972844 74.440367 59.561651 60.233486
Mediana 66.920000 73.650000 60.140000 59.840000
Moda 63.870000 73.480000 56.640000 57.470000
Desvio Padrão (populacional) 3.019796 2.181610 3.302442 3.374308
Desvio Padrão (amostral) 3.033744 2.191687 3.317696 3.389893
Variância (populacional) 9.119165 4.759422 10.906122 11.385951
Variância (amostral) 9.203602 4.803491 11.007105 11.491377
Coeficiente de Variação 4.529812 2.944218 5.570188 5.627921
Home Equity
Média 45.578257
Mediana 44.360000
Moda 41.430000
Desvio Padrão (populacional) 4.990935
Desvio Padrão (amostral) 5.013987
Variância (populacional) 24.909427
Variância (amostral) 25.140070
Coeficiente de Variação 11.000832
categorias = ['SFH', 'FGTS', 'Livre', 'Comercial', 'Home Equity']
fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))
for i, column in enumerate(credito_ltv_pf.columns):
credito_ltv_pf.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Crédito - Loan To Value (LTV) \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = credito_ltv_pf.columns.str.replace('Credito_LTV_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(credito_ltv_pf.columns):
plt.plot(credito_ltv_pf.index, credito_ltv_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Crédito \n Loan to Value - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('LTV em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Crédito PF¶
# Concatena os DataFrames valor_contratado, indexadores, taxa e ltv ao longo do eixo das colunas (axis=1)
credito_pf = pd.concat([valor_contratado_pf, credito_indexadores_pf, credito_taxa_pf, credito_ltv_pf], axis=1)
# Adiciona PF ao início do nome das colunas para sinalizar Pessoa Física
credito_pf.columns = [col + '_PF' for col in credito_pf.columns]
# Converter colunas para float
credito_pf = credito_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as estatísticas do DataFrame
# print(credito_pf.describe())
Contratação PJ¶
Estoque em milhões de R$
# Ler o arquivo CSV referente ao Valor contratado Pessoa Jurídica com ponto e vírgula como delimitador
valor_contratado_pj = pd.read_csv('credito_valor_contratado_pj.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
valor_contratado_pj.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
valor_contratado_pj.index = pd.to_datetime(valor_contratado_pj.index)
# Adiciona VC ao início do nome das colunas
valor_contratado_pj.columns = ['VC_' + col for col in valor_contratado_pj.columns]
# Converter colunas para float
valor_contratado_pj = valor_contratado_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(valor_contratado_pj.describe())
VC_Comercial VC_FGTS VC_Livre VC_SFH count 109.000000 109.000000 109.000000 109.000000 mean 117.011642 223.193539 335.544097 466.823647 std 175.187122 169.557341 367.833245 279.038858 min 0.480000 4.888641 2.542030 33.032582 25% 11.838232 105.663093 91.661385 276.179046 50% 41.529467 188.964192 231.784345 445.111477 75% 166.979222 287.815778 442.753192 633.859711 max 946.632069 1147.518933 2524.422472 1681.867654
estatisticas_valor_contratado_pj = valor_contratado_pj.select_dtypes(include=['float64']).apply(calcula_estat)
print(estatisticas_valor_contratado_pj)
VC_Comercial VC_FGTS VC_Livre \
Média 117.011642 223.193539 335.544097
Mediana 41.529467 188.964192 231.784345
Moda 0.480000 4.888641 2.542030
Desvio Padrão (populacional) 174.381659 168.777763 366.142049
Desvio Padrão (amostral) 175.187122 169.557341 367.833245
Variância (populacional) 30408.963159 28485.933215 134059.999885
Variância (amostral) 30690.527633 28749.691856 135301.296180
Coeficiente de Variação 149.717685 75.968750 109.622922
VC_SFH
Média 466.823647
Mediana 445.111477
Moda 33.032582
Desvio Padrão (populacional) 277.755913
Desvio Padrão (amostral) 279.038858
Variância (populacional) 77148.347459
Variância (amostral) 77862.684009
Coeficiente de Variação 59.773934
categorias = [coluna.replace('VC_', '') for coluna in valor_contratado_pj.columns]
fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
for i, column in enumerate(valor_contratado_pj.columns):
valor_contratado_pj.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Crédito - Contratação \n Pessoa Jurídica\n ", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = valor_contratado_pj.columns.str.replace('VC_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(valor_contratado_pj.columns):
plt.plot(valor_contratado_pj.index, valor_contratado_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Crédito \n Valor Contratado - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Valor Contratado em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Indexadores PJ¶
Estoque em milhões de R$
# Ler o arquivo CSV referente aos Indexadores com ponto e vírgula como delimitador
credito_indexadores_pj = pd.read_csv('credito_indexadores_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
credito_indexadores_pj.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
credito_indexadores_pj.index = pd.to_datetime(credito_indexadores_pj.index)
# Adiciona Credito_ ao início do nome das colunas
credito_indexadores_pj.columns = ['Credito_' + col for col in credito_indexadores_pj.columns]
# Converter colunas para float
credito_indexadores_pj = credito_indexadores_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(credito_indexadores_pj.describe())
Credito_IPCA Credito_Outros Credito_CDI Credito_Prefixado \
count 8.000000 49.000000 53.000000 95.000000
mean 28.058558 53.444666 129.966088 303.767587
std 16.328193 61.519716 135.164482 412.291070
min 8.907003 0.050000 3.000000 0.135000
25% 18.028171 5.770710 20.000000 49.595924
50% 24.345500 27.304440 75.000000 152.994227
75% 37.072684 82.440139 195.315041 444.333156
max 52.400000 229.684015 476.327243 2654.607993
Credito_TR
count 109.000000
mean 788.541911
std 461.758416
min 91.965873
25% 460.905123
50% 675.666774
75% 1035.135479
max 2783.506263
estatisticas_credito_indexadores_pj = credito_indexadores_pj.select_dtypes(include=['float64']).apply(calcula_estat)
print(estatisticas_credito_indexadores_pj)
Credito_IPCA Credito_Outros Credito_CDI \
Média 28.058558 53.444666 129.966088
Mediana 24.345500 27.304440 75.000000
Moda 8.907003 0.050000 5.000000
Desvio Padrão (populacional) 15.273626 60.888728 133.883273
Desvio Padrão (amostral) 16.328193 61.519716 135.164482
Variância (populacional) 233.283655 3707.437155 17924.730747
Variância (amostral) 266.609891 3784.675429 18269.437108
Coeficiente de Variação 58.193273 115.109178 103.999808
Credito_Prefixado Credito_TR
Média 303.767587 788.541911
Mediana 152.994227 675.666774
Moda 10.000000 91.965873
Desvio Padrão (populacional) 410.115377 459.635378
Desvio Padrão (amostral) 412.291070 461.758416
Variância (populacional) 168194.622263 211264.680268
Variância (amostral) 169983.926755 213220.834715
Coeficiente de Variação 135.725827 58.558513
categorias = [coluna.replace('Credito_', '') for coluna in credito_indexadores_pj.columns]
fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))
for i, column in enumerate(credito_indexadores_pj.columns):
credito_indexadores_pj.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Crédito - Indexadores \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = credito_indexadores_pj.columns.str.replace('Credito_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(credito_indexadores_pj.columns):
plt.plot(credito_indexadores_pj.index, credito_indexadores_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Crédito \n Indexadores - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Indexadores em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Taxa PJ¶
Porcentagem ao ano
# Ler o arquivo CSV referente às Taxas com ponto e vírgula como delimitador
credito_taxa_pj = pd.read_csv('credito_taxa_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
credito_taxa_pj.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
credito_taxa_pj.index = pd.to_datetime(credito_taxa_pj.index)
# Adiciona Credito_Taxa_ ao início do nome das colunas
credito_taxa_pj.columns = ['Credito_'+ col for col in credito_taxa_pj.columns]
# Converter colunas para float
credito_taxa_pj = credito_taxa_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(credito_taxa_pj.describe())
Credito_SFH Credito_FGTS Credito_Livre Credito_Comercial count 109.000000 109.000000 109.000000 109.000000 mean 9.968165 8.957064 11.095505 11.543028 std 2.319295 0.998368 2.442452 2.479058 min 4.800000 8.290000 4.340000 6.330000 25% 8.520000 8.290000 9.890000 9.480000 50% 9.980000 8.290000 10.680000 11.160000 75% 11.500000 9.670000 12.540000 13.370000 max 14.400000 11.350000 16.110000 17.240000
estatisticas_credito_taxa_pj = credito_taxa_pj.select_dtypes(include=['float64']).apply(calcula_estat)
print(estatisticas_credito_taxa_pj)
Credito_SFH Credito_FGTS Credito_Livre \
Média 9.968165 8.957064 11.095505
Mediana 9.980000 8.290000 10.680000
Moda 5.490000 8.290000 8.710000
Desvio Padrão (populacional) 2.308632 0.993778 2.431222
Desvio Padrão (amostral) 2.319295 0.998368 2.442452
Variância (populacional) 5.329780 0.987595 5.910839
Variância (amostral) 5.379130 0.996739 5.965569
Coeficiente de Variação 23.267022 11.146156 22.012983
Credito_Comercial
Média 11.543028
Mediana 11.160000
Moda 8.690000
Desvio Padrão (populacional) 2.467660
Desvio Padrão (amostral) 2.479058
Variância (populacional) 6.089346
Variância (amostral) 6.145729
Coeficiente de Variação 21.476671
categorias = [coluna.replace('Credito_', '') for coluna in credito_taxa_pj.columns]
fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
for i, column in enumerate(credito_taxa_pj.columns):
credito_taxa_pj.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Crédito - Taxa \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = credito_taxa_pj.columns.str.replace('Credito_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(credito_taxa_pj.columns):
plt.plot(credito_taxa_pj.index, credito_taxa_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Crédito \n Taxa - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Taxa em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Crédito PJ¶
# Concatena os DataFrames valor_contratado_pj, indexadores_pj e taxa_pj ao longo do eixo das colunas (axis=1)
credito_pj = pd.concat([valor_contratado_pj, credito_indexadores_pj, credito_taxa_pj], axis=1)
# Adiciona PJ ao início do nome das colunas para sinalizar Pessoa Jurídica
credito_pj.columns = [col + '_PJ' for col in credito_pj.columns]
credito_pj = credito_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as estatísticas do DataFrame
print(credito_pj.describe())
VC_Comercial_PJ VC_FGTS_PJ VC_Livre_PJ VC_SFH_PJ \
count 109.000000 109.000000 109.000000 109.000000
mean 117.011642 223.193539 335.544097 466.823647
std 175.187122 169.557341 367.833245 279.038858
min 0.480000 4.888641 2.542030 33.032582
25% 11.838232 105.663093 91.661385 276.179046
50% 41.529467 188.964192 231.784345 445.111477
75% 166.979222 287.815778 442.753192 633.859711
max 946.632069 1147.518933 2524.422472 1681.867654
Credito_IPCA_PJ Credito_Outros_PJ Credito_CDI_PJ \
count 8.000000 49.000000 53.000000
mean 28.058558 53.444666 129.966088
std 16.328193 61.519716 135.164482
min 8.907003 0.050000 3.000000
25% 18.028171 5.770710 20.000000
50% 24.345500 27.304440 75.000000
75% 37.072684 82.440139 195.315041
max 52.400000 229.684015 476.327243
Credito_Prefixado_PJ Credito_TR_PJ Credito_SFH_PJ Credito_FGTS_PJ \
count 95.000000 109.000000 109.000000 109.000000
mean 303.767587 788.541911 9.968165 8.957064
std 412.291070 461.758416 2.319295 0.998368
min 0.135000 91.965873 4.800000 8.290000
25% 49.595924 460.905123 8.520000 8.290000
50% 152.994227 675.666774 9.980000 8.290000
75% 444.333156 1035.135479 11.500000 9.670000
max 2654.607993 2783.506263 14.400000 11.350000
Credito_Livre_PJ Credito_Comercial_PJ
count 109.000000 109.000000
mean 11.095505 11.543028
std 2.442452 2.479058
min 4.340000 6.330000
25% 9.890000 9.480000
50% 10.680000 11.160000
75% 12.540000 13.370000
max 16.110000 17.240000
Crédito PF + Crédito PJ¶
# Merge dos DataFrames credito_pessoa_fisica e credito_pessoa_juridica
credito = pd.merge(credito_pf, credito_pj, how='inner', on='DateTime')
# Converter índice para datetime
credito.index = pd.to_datetime(credito.index)
# Converter colunas para float
credito = credito.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(credito.info())
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30 Data columns (total 32 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 VC_Comercial_PF 109 non-null float64 1 VC_Home Equity_PF 109 non-null float64 2 VC_Livre_PF 109 non-null float64 3 VC_FGTS_PF 109 non-null float64 4 VC_SFH_PF 109 non-null float64 5 Credito_Prefixado_PF 109 non-null float64 6 Credito_IPCA_PF 90 non-null float64 7 Credito_Outros_PF 109 non-null float64 8 Credito_TR_PF 109 non-null float64 9 Credito_Taxa_SFH_PF 109 non-null float64 10 Credito_Taxa_FGTS_PF 109 non-null float64 11 Credito_Taxa_Livre_PF 109 non-null float64 12 Credito_Taxa_Comercial_PF 109 non-null float64 13 Credito_Taxa_Home Equity_PF 109 non-null float64 14 Credito_LTV_SFH_PF 109 non-null float64 15 Credito_LTV_FGTS_PF 109 non-null float64 16 Credito_LTV_Livre_PF 109 non-null float64 17 Credito_LTV_Comercial_PF 109 non-null float64 18 Credito_LTV_Home Equity_PF 109 non-null float64 19 VC_Comercial_PJ 109 non-null float64 20 VC_FGTS_PJ 109 non-null float64 21 VC_Livre_PJ 109 non-null float64 22 VC_SFH_PJ 109 non-null float64 23 Credito_IPCA_PJ 8 non-null float64 24 Credito_Outros_PJ 49 non-null float64 25 Credito_CDI_PJ 53 non-null float64 26 Credito_Prefixado_PJ 95 non-null float64 27 Credito_TR_PJ 109 non-null float64 28 Credito_SFH_PJ 109 non-null float64 29 Credito_FGTS_PJ 109 non-null float64 30 Credito_Livre_PJ 109 non-null float64 31 Credito_Comercial_PJ 109 non-null float64 dtypes: float64(32) memory usage: 28.1 KB None
# Imprime as primeiras linhas do DataFrame
print(credito.head())
VC_Comercial_PF VC_Home Equity_PF VC_Livre_PF VC_FGTS_PF \
DateTime
2014-04-30 0.025627 0.272721 2.022522 2.270508
2014-05-31 0.048241 0.273943 2.397400 2.675238
2014-06-30 0.045680 0.430680 2.080355 2.943574
2014-07-31 0.057653 0.275115 2.226900 3.590715
2014-08-31 0.058745 0.293163 2.197764 3.318467
VC_SFH_PF Credito_Prefixado_PF Credito_IPCA_PF \
DateTime
2014-04-30 5.414101 0.066203 NaN
2014-05-31 6.697185 0.066758 NaN
2014-06-30 5.689549 0.220339 NaN
2014-07-31 5.673874 0.101505 NaN
2014-08-31 5.279652 0.107494 NaN
Credito_Outros_PF Credito_TR_PF Credito_Taxa_SFH_PF ... \
DateTime ...
2014-04-30 0.042165 9.897111 8.97 ...
2014-05-31 0.031836 11.993413 9.02 ...
2014-06-30 0.031728 10.937771 9.04 ...
2014-07-31 0.031111 11.691641 9.21 ...
2014-08-31 0.017469 11.022828 9.09 ...
VC_SFH_PJ Credito_IPCA_PJ Credito_Outros_PJ Credito_CDI_PJ \
DateTime
2014-04-30 638.830258 NaN NaN 335.450000
2014-05-31 532.539998 NaN 0.768516 394.080000
2014-06-30 440.405550 NaN NaN 179.757322
2014-07-31 727.746233 NaN NaN 22.900000
2014-08-31 547.840909 NaN NaN NaN
Credito_Prefixado_PJ Credito_TR_PJ Credito_SFH_PJ \
DateTime
2014-04-30 102.510513 1123.626611 10.54
2014-05-31 301.450725 2783.506263 10.52
2014-06-30 292.329056 1421.392039 10.15
2014-07-31 20.000000 968.806176 11.06
2014-08-31 45.469845 1026.957350 10.58
Credito_FGTS_PJ Credito_Livre_PJ Credito_Comercial_PJ
DateTime
2014-04-30 8.29 10.36 12.83
2014-05-31 8.29 9.15 12.54
2014-06-30 8.29 9.98 12.99
2014-07-31 8.29 11.28 13.77
2014-08-31 8.29 10.68 8.78
[5 rows x 32 columns]
Estoque¶
Carteira de Crédito PF¶
Estoque em bilhões de R$
# Ler o arquivo CSV referente à Carteira de Crédito de Pessoa Física com ponto e vírgula como delimitador
carteira_credito_pf = pd.read_csv('estoque_carteira_de_credito.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
carteira_credito_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
carteira_credito_pf.index = pd.to_datetime(carteira_credito_pf.index)
# Adiciona Carteira_ ao início do nome das colunas
carteira_credito_pf.columns = ['Estoque_Carteira_' + col for col in carteira_credito_pf.columns]
# Converter colunas para float
carteira_credito_pf = carteira_credito_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(carteira_credito_pf.describe())
Estoque_Carteira_Comercial Estoque_Carteira_Home Equity \
count 109.000000 109.000000
mean 1.727357 12.095405
std 0.469143 1.236801
min 0.561784 10.320047
25% 1.629101 11.324031
50% 1.788955 11.825104
75% 1.949600 12.238563
max 2.986108 16.138588
Estoque_Carteira_Livre Estoque_Carteira_FGTS Estoque_Carteira_SFH
count 109.000000 109.000000 109.000000
mean 62.095300 273.026605 287.861167
std 8.322603 79.895769 78.746554
min 50.356458 122.111077 180.260926
25% 55.578010 205.667161 246.022067
50% 61.104358 284.456814 252.760006
75% 66.165892 343.520091 323.590577
max 80.713873 402.978885 480.468710
categorias = [coluna.replace('Estoque_Carteira_', '') for coluna in carteira_credito_pf.columns]
fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))
for i, column in enumerate(carteira_credito_pf.columns):
carteira_credito_pf.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Estoque - Carteira de Crédito \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = carteira_credito_pf.columns.str.replace('Estoque_Carteira_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(carteira_credito_pf.columns):
plt.plot(carteira_credito_pf.index, carteira_credito_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Estoque \n Carteira de Crédito - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Carteira de Crédito em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Indexadores PF¶
Estoque em bilhões de R$
# Ler o arquivo CSV referente aos Indexadores de Pessoas Físicas com ponto e vírgula como delimitador
estoque_indexadores_pf = pd.read_csv('estoque_indexadores.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
estoque_indexadores_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
estoque_indexadores_pf.index = pd.to_datetime(estoque_indexadores_pf.index)
# Adiciona Estoque_ ao início do nome das colunas
estoque_indexadores_pf.columns = ['Estoque_' + col for col in estoque_indexadores_pf.columns]
# Converter colunas para float
estoque_indexadores_pf = estoque_indexadores_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(estoque_indexadores_pf.describe())
Estoque_Prefixado Estoque_IPCA Estoque_Outros Estoque_TR count 109.000000 94.000000 109.000000 109.000000 mean 5.710194 6.833594 6.204678 618.997771 std 0.805023 8.335445 7.564750 139.730209 min 4.120013 0.000055 0.829092 365.561372 25% 5.008484 0.110877 1.378890 522.537205 50% 5.562816 0.238389 1.540259 599.866255 75% 6.124464 16.620500 9.834744 701.797164 max 7.596104 20.136287 23.060182 933.880035
categorias = [coluna.replace('Estoque_', '') for coluna in estoque_indexadores_pf.columns]
fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
for i, column in enumerate(estoque_indexadores_pf.columns):
estoque_indexadores_pf.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Estoque - Indexadores \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = estoque_indexadores_pf.columns.str.replace('Estoque_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(estoque_indexadores_pf.columns):
plt.plot(estoque_indexadores_pf.index, estoque_indexadores_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Estoque \n Indexadores - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Carteira de Crédito em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Risco da Operação PF¶
Porcentagem
# Ler o arquivo CSV referente ao Risco da Operação de Pessoas Físicas com ponto e vírgula como delimitador
risco_da_operacao_pf = pd.read_csv('estoque_risco_da_operacao.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
risco_da_operacao_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
risco_da_operacao_pf.index = pd.to_datetime(risco_da_operacao_pf.index)
# Adiciona Risco_ ao início do nome das colunas
risco_da_operacao_pf.columns = ['Estoque_Risco_' + col for col in risco_da_operacao_pf.columns]
# Define a ordem das colunas de risco em ordem crescente
ordem_das_colunas_crescente = ['Estoque_Risco_AA', 'Estoque_Risco_A', 'Estoque_Risco_B', 'Estoque_Risco_C', 'Estoque_Risco_D ou mais']
# Reordena as colunas do DataFrame em ordem crescente
risco_da_operacao_pf = risco_da_operacao_pf[ordem_das_colunas_crescente]
# Converter colunas para float
risco_da_operacao_pf = risco_da_operacao_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(risco_da_operacao_pf.describe())
Estoque_Risco_AA Estoque_Risco_A Estoque_Risco_B Estoque_Risco_C \
count 109.000000 109.000000 109.000000 109.000000
mean 65.351743 10.014954 11.790000 7.958073
std 6.134965 4.988611 1.233126 1.057124
min 44.830000 5.590000 9.750000 6.020000
25% 64.490000 6.780000 11.020000 7.060000
50% 67.500000 8.470000 11.620000 7.740000
75% 69.110000 11.110000 12.480000 8.720000
max 72.060000 28.630000 15.560000 10.080000
Estoque_Risco_D ou mais
count 109.000000
mean 4.884587
std 0.523318
min 3.520000
25% 4.640000
50% 4.880000
75% 5.090000
max 5.950000
categorias = [coluna.replace('Estoque_', '').replace('_', ' ') for coluna in risco_da_operacao_pf.columns]
fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))
for i, column in enumerate(risco_da_operacao_pf.columns):
risco_da_operacao_pf.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Estoque - Risco da Operação \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = risco_da_operacao_pf.columns.str.replace('Estoque_', '').str.replace('_', ' ')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(risco_da_operacao_pf.columns):
plt.plot(risco_da_operacao_pf.index, risco_da_operacao_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Estoque \n Risco da Operação - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Risco da Operação em Porcentagem', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Inadimplência PF¶
Porcentagem
# Ler o arquivo CSV referente à Inadimplência de Pessoas Físicas com ponto e vírgula como delimitador
inadimplencia_pf = pd.read_csv('estoque_inadimplencia.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
inadimplencia_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
inadimplencia_pf.index = pd.to_datetime(inadimplencia_pf.index)
# Adiciona Estoque_Inadimplencia_ ao início do nome das colunas
inadimplencia_pf.columns = ['Estoque_' + col for col in inadimplencia_pf.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
inadimplencia_pf = inadimplencia_pf.iloc[:-2]
# Converter colunas para float
inadimplencia_pf = inadimplencia_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(inadimplencia_pf.describe())
Estoque_Home Equity Estoque_SFH Estoque_Livre Estoque_FGTS \
count 109.000000 0.0 109.000000 109.000000
mean 4.472018 NaN 1.319174 2.132936
std 1.233416 NaN 0.374144 0.380454
min 2.190000 NaN 0.670000 1.440000
25% 3.580000 NaN 0.970000 1.850000
50% 4.330000 NaN 1.310000 2.070000
75% 5.580000 NaN 1.620000 2.380000
max 6.590000 NaN 2.200000 3.230000
Estoque_Comercial
count 109.000000
mean 1.200459
std 0.351595
min 0.560000
25% 0.930000
50% 1.140000
75% 1.480000
max 1.990000
# Elimina coluna Estoque_SFH
inadimplencia_pf.drop(columns=['Estoque_SFH'], inplace=True)
categorias = [coluna.replace('Estoque_', '') for coluna in inadimplencia_pf.columns]
fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
for i, column in enumerate(inadimplencia_pf.columns):
inadimplencia_pf.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Estoque - Inadimplência \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = inadimplencia_pf.columns.str.replace('Estoque_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(inadimplencia_pf.columns):
plt.plot(inadimplencia_pf.index, inadimplencia_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Estoque \n Inadimplência - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Inadimplência em Porcentagem', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Ativos Problemáticos PF¶
Em bilhões de R$
# Ler o arquivo CSV referente aos Ativos Problemáticos de Pessoas Físicas com ponto e vírgula como delimitador
ativos_problematicos_pf = pd.read_csv('estoque_ativos_problematicos.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
ativos_problematicos_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
ativos_problematicos_pf.index = pd.to_datetime(ativos_problematicos_pf.index)
# Adiciona Estoque_AP_ ao início do nome das colunas
ativos_problematicos_pf.columns = ['Estoque_AP_' + col for col in ativos_problematicos_pf.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
ativos_problematicos_pf = ativos_problematicos_pf.iloc[:-2]
# Converter colunas para float
ativos_problematicos_pf = ativos_problematicos_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(ativos_problematicos_pf.describe())
Estoque_AP_Comercial Estoque_AP_Home Equity Estoque_AP_Livre \
count 0.0 109.000000 109.000000
mean NaN 1.059793 2.006863
std NaN 0.267735 0.387870
min NaN 0.619129 1.146923
25% NaN 0.843009 1.682558
50% NaN 1.046805 1.995765
75% NaN 1.264995 2.298662
max NaN 1.536512 2.724873
Estoque_AP_SFH Estoque_AP_FGTS
count 109.000000 109.000000
mean 10.627366 19.047434
std 1.470095 8.776903
min 8.409809 8.773949
25% 9.580357 12.260033
50% 10.487986 14.608386
75% 11.553059 26.351608
max 15.339049 37.723416
# É possível identificar que a coluna Estoque_AP_Comercial possui apenas valores nulos
# Eliminar coluna Estoque_AP_Comercial
ativos_problematicos_pf.drop('Estoque_AP_Comercial', axis=1, inplace=True)
fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
for i, column in enumerate(ativos_problematicos_pf.columns):
ativos_problematicos_pf.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Estoque - Ativos Problemáticos \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = ativos_problematicos_pf.columns.str.replace('Estoque_AP_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(ativos_problematicos_pf.columns):
plt.plot(ativos_problematicos_pf.index, ativos_problematicos_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Estoque \n Ativos Problemáticos - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Ativos Problemáticos em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Valor da Próxima Parcela PF¶
Em milhares de R$
# Ler o arquivo CSV referente ao Valor da Próxima Parcela de Pessoas Físicas com ponto e vírgula como delimitador
valor_proxima_parcela_pf = pd.read_csv('estoque_valor_proxima_parcela.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
valor_proxima_parcela_pf.set_index('DateTime', inplace=True, drop=True)
# Converter indice para datetime
valor_proxima_parcela_pf.index = pd.to_datetime(valor_proxima_parcela_pf.index)
# Adiciona Estoque_VPP_ ao início do nome das colunas
valor_proxima_parcela_pf.columns = ['Estoque_VPP_' + col for col in valor_proxima_parcela_pf.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
valor_proxima_parcela_pf = valor_proxima_parcela_pf.iloc[:-2]
# Converter para float
valor_proxima_parcela_pf = valor_proxima_parcela_pf.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(valor_proxima_parcela_pf.describe())
Estoque_VPP_Home Equity Estoque_VPP_SFH Estoque_VPP_Livre \
count 86.000000 86.000000 86.000000
mean 1631.840698 1460.408140 2464.850233
std 62.149709 48.348384 139.694951
min 1547.600000 1244.010000 2106.360000
25% 1578.150000 1442.562500 2390.420000
50% 1617.270000 1459.135000 2459.815000
75% 1669.692500 1469.397500 2593.855000
max 1797.170000 1578.720000 2652.840000
Estoque_VPP_FGTS Estoque_VPP_Comercial
count 86.000000 86.000000
mean 500.314186 2043.395814
std 30.008494 177.875189
min 441.370000 1835.540000
25% 480.195000 1887.722500
50% 493.475000 1947.905000
75% 516.812500 2207.502500
max 562.340000 2352.850000
categorias = [coluna.replace('Estoque_VPP_', '') for coluna in valor_proxima_parcela_pf.columns]
fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))
for i, column in enumerate(valor_proxima_parcela_pf.columns):
valor_proxima_parcela_pf.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Estoque - Valor da Próxima Parcela \n Pessoa Física\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = valor_proxima_parcela_pf.columns.str.replace('Estoque_VPP_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(valor_proxima_parcela_pf.columns):
plt.plot(valor_proxima_parcela_pf.index, valor_proxima_parcela_pf[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Estoque \n Valor da Próxima Parcela - Pessoa Física', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Valor da Próxima Parcela em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Estoque PF¶
# Concatena os DataFrames carteira_credito_pf, indexadores_pf, risco_da_operacao_pf, inadimplencia_pf, ativos_problematicos_pf e valor_proxima_parcela_pf ao longo do eixo das colunas (axis=1)
estoque_pf = pd.concat([carteira_credito_pf, estoque_indexadores_pf, risco_da_operacao_pf, inadimplencia_pf, ativos_problematicos_pf, valor_proxima_parcela_pf], axis=1)
# Adiciona PF ao início do nome das colunas para sinalizar Pessoa Física
estoque_pf.columns = estoque_pf.columns + '_PF'
Carteira de Crédito PJ¶
Em bilhões de R$
# Ler o arquivo CSV referente à Carteira de Crédito de Pessoa Jurídica com ponto e vírgula como delimitador
carteira_credito_pj = pd.read_csv('estoque_carteira_de_credito_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
carteira_credito_pj.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
carteira_credito_pj.index = pd.to_datetime(carteira_credito_pj.index)
# Adiciona Carteira_ ao início do nome das colunas
carteira_credito_pj.columns = ['Estoque_Carteira_' + col for col in carteira_credito_pj.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
carteira_credito_pj = carteira_credito_pj.iloc[:-2]
# Converter colunas para float
carteira_credito_pj = carteira_credito_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(carteira_credito_pj.describe())
Estoque_Carteira_Home Equity Estoque_Carteira_FGTS \
count 0.0 109.000000
mean NaN 1.960835
std NaN 0.578664
min NaN 0.917347
25% NaN 1.620300
50% NaN 2.007750
75% NaN 2.478395
max NaN 2.971825
Estoque_Carteira_Comercial Estoque_Carteira_Livre \
count 109.000000 109.000000
mean 10.510801 15.591446
std 5.253408 7.215262
min 1.461609 7.582781
25% 7.407607 9.542550
50% 9.210295 13.657219
75% 15.933175 19.507877
max 19.111961 32.086141
Estoque_Carteira_SFH
count 109.000000
mean 15.773987
std 8.677373
min 5.311441
25% 7.617477
50% 12.779000
75% 26.333336
max 27.500937
# É possível identificar que a coluna Estoque_Carteira_Home Equity possui apenas valores nulos
# Eliminar coluna Estoque_Carteira_Home Equity
carteira_credito_pj.drop('Estoque_Carteira_Home Equity', axis=1, inplace=True)
categorias = [coluna.replace('Estoque_Carteira_', '') for coluna in carteira_credito_pj.columns]
fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
for i, column in enumerate(carteira_credito_pj.columns):
carteira_credito_pj.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Estoque - Carteira de Crédito \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = carteira_credito_pj.columns.str.replace('Estoque_Carteira_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(carteira_credito_pj.columns):
plt.plot(carteira_credito_pj.index, carteira_credito_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Estoque \n Carteira de Crédito - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Carteira de Crédito em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Indexadores PJ¶
Em bilhões de R$
# Ler o arquivo CSV referente aos Indexadores de Pessoas Jurídicas com ponto e vírgula como delimitador
estoque_indexadores_pj = pd.read_csv('estoque_indexadores_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
estoque_indexadores_pj.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
estoque_indexadores_pj.index = pd.to_datetime(estoque_indexadores_pj.index)
# Adiciona Estoque_Indexadores ao início do nome das colunas
estoque_indexadores_pj.columns = ['Estoque_' + col for col in estoque_indexadores_pj.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
estoque_indexadores_pj = estoque_indexadores_pj.iloc[:-2]
# Converter colunas para float
estoque_indexadores_pj = estoque_indexadores_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(estoque_indexadores_pj.describe())
Estoque_IPCA Estoque_Prefixado Estoque_Outros Estoque_CDI \
count 36.000000 109.000000 109.000000 109.000000
mean 0.108316 0.079402 0.824531 1.422932
std 0.051575 0.076731 1.959710 0.636736
min 0.005033 0.000000 0.000016 0.608025
25% 0.082285 0.016216 0.000590 0.948105
50% 0.124947 0.035543 0.005463 1.286519
75% 0.149089 0.154582 0.223957 1.728116
max 0.162773 0.221411 7.952713 3.283441
Estoque_TR
count 109.000000
mean 41.474429
std 16.143992
min 19.730944
25% 25.099155
50% 42.041332
75% 57.750972
max 62.861540
categorias = [coluna.replace('Estoque_', '') for coluna in estoque_indexadores_pj.columns]
fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))
for i, column in enumerate(estoque_indexadores_pj.columns):
estoque_indexadores_pj.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Estoque - Indexadores \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = estoque_indexadores_pj.columns.str.replace('Estoque_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(estoque_indexadores_pj.columns):
plt.plot(estoque_indexadores_pj.index, estoque_indexadores_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Estoque \n Indexadores - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Indexadores em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Risco da Operação PJ¶
Porcentagem
# Ler o arquivo CSV referente ao Risco da Operação de Pessoas Jurídicas com ponto e vírgula como delimitador
risco_da_operacao_pj = pd.read_csv('estoque_risco_operacao_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
risco_da_operacao_pj.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
risco_da_operacao_pj.index = pd.to_datetime(risco_da_operacao_pj.index)
# Adiciona Risco_ ao início do nome das colunas
risco_da_operacao_pj.columns = ['Estoque_Risco_' + col for col in risco_da_operacao_pj.columns]
# Define a ordem das colunas de risco em ordem crescente
ordem_das_colunas_crescente = ['Estoque_Risco_AA', 'Estoque_Risco_A', 'Estoque_Risco_B', 'Estoque_Risco_C', 'Estoque_Risco_D ou mais']
# Reordena as colunas do DataFrame em ordem crescente
risco_da_operacao_pj = risco_da_operacao_pj[ordem_das_colunas_crescente]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
risco_da_operacao_pj = risco_da_operacao_pj.iloc[:-2]
# Converter colunas para float
risco_da_operacao_pj = risco_da_operacao_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(risco_da_operacao_pj.describe())
Estoque_Risco_AA Estoque_Risco_A Estoque_Risco_B Estoque_Risco_C \
count 109.000000 109.000000 109.000000 109.000000
mean 39.165321 17.346514 16.118165 9.571376
std 5.663680 4.137660 3.491584 1.939256
min 30.980000 9.510000 11.310000 3.610000
25% 34.480000 13.640000 13.260000 8.820000
50% 38.440000 17.220000 14.330000 9.500000
75% 42.970000 20.940000 19.270000 10.390000
max 53.910000 25.730000 24.040000 14.880000
Estoque_Risco_D ou mais
count 109.000000
mean 17.799908
std 11.183172
min 0.990000
25% 6.290000
50% 19.700000
75% 28.310000
max 32.490000
categorias = [coluna.replace('Estoque_', '').replace('_', ' ') for coluna in risco_da_operacao_pj.columns]
fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(15, 5))
for i, column in enumerate(risco_da_operacao_pj.columns):
risco_da_operacao_pj.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Estoque - Risco da Operação \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = risco_da_operacao_pj.columns.str.replace('Estoque_', '').str.replace('_', ' ')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(risco_da_operacao_pj.columns):
plt.plot(risco_da_operacao_pj.index, risco_da_operacao_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Estoque \n Risco da Operação - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Risco da Operação em Porcentagem', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Inadimplência PJ¶
Porcentagem
# Ler o arquivo CSV referente à Inadimplência de Pessoas Jurídicas com ponto e vírgula como delimitador
inadimplencia_pj = pd.read_csv('estoque_inadimplencia_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
inadimplencia_pj.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
inadimplencia_pj.index = pd.to_datetime(inadimplencia_pj.index)
# Adiciona Estoque_Inadimplencia_ ao início do nome das colunas
inadimplencia_pj.columns = ['Estoque_' + col for col in inadimplencia_pj.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
inadimplencia_pj = inadimplencia_pj.iloc[:-2]
# Converter colunas para float
inadimplencia_pj = inadimplencia_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(inadimplencia_pj.describe())
Estoque_SFH Estoque_Livre Estoque_FGTS Estoque_Comercial count 109.000000 109.000000 109.000000 105.000000 mean 3.364128 5.996789 1.470367 2.535238 std 3.205572 7.457258 0.882337 2.438189 min 0.060000 0.420000 0.120000 0.000000 25% 0.600000 1.450000 0.740000 0.260000 50% 2.070000 2.920000 1.320000 1.920000 75% 5.350000 9.430000 2.130000 4.140000 max 11.720000 40.290000 4.390000 9.690000
categorias = [coluna.replace('Estoque_', '') for coluna in inadimplencia_pj.columns]
fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(15, 5))
for i, column in enumerate(inadimplencia_pj.columns):
inadimplencia_pj.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Estoque - Inadimplência \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = inadimplencia_pj.columns.str.replace('Estoque_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(inadimplencia_pj.columns):
plt.plot(inadimplencia_pj.index, inadimplencia_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Estoque \n Inadimplência - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Inadimplência em Porcentagem', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Ativos Problemáticos PJ¶
Em bilhões de R$
# Ler o arquivo CSV referente aos Ativos Problemáticos de Pessoas Jurídicas com ponto e vírgula como delimitador
ativos_problematicos_pj = pd.read_csv('estoque_ativos_problematicos_pj.csv', delimiter = ';', skipinitialspace=True)
# Define DateTime como índice
ativos_problematicos_pj.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
ativos_problematicos_pj.index = pd.to_datetime(ativos_problematicos_pj.index)
# Adiciona Estoque_Ativos_Problematicos_ ao início do nome das colunas
ativos_problematicos_pj.columns = ['Estoque_AP_' + col for col in ativos_problematicos_pj.columns]
# Retira as duas últimas linhas do DataFrame para manter o mesmo número de linhas dos outros DataFrames
ativos_problematicos_pj = ativos_problematicos_pj.iloc[:-2]
# Converter colunas para float
ativos_problematicos_pj = ativos_problematicos_pj.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(ativos_problematicos_pj.describe())
Estoque_AP_FGTS Estoque_AP_SFH Estoque_AP_Comercial Estoque_AP_Livre count 0.0 109.000000 109.000000 109.000000 mean NaN 1.224035 1.485780 3.056549 std NaN 0.840675 1.224140 1.868412 min NaN 0.168163 0.002799 0.159882 25% NaN 0.401197 0.596731 1.059223 50% NaN 1.271253 1.224052 3.595104 75% NaN 1.877639 2.341957 4.736214 max NaN 2.667923 4.043584 5.789070
# É possível identificar que a coluna Estoque_AP_FGTS possui apenas valores nulos
# Eliminar coluna Estoque_AP_FGTS
ativos_problematicos_pj.drop('Estoque_AP_FGTS', axis=1, inplace=True)
categorias = [coluna.replace('Estoque_AP_', '') for coluna in ativos_problematicos_pj.columns]
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))
for i, column in enumerate(ativos_problematicos_pj.columns):
ativos_problematicos_pj.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Estoque - Ativos Problemáticos \n Pessoa Jurídica\n", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
rotulos_series = ativos_problematicos_pj.columns.str.replace('Estoque_AP_', '')
# Iterar pelas colunas e plotar cada uma separadamente
for i, coluna in enumerate(ativos_problematicos_pj.columns):
plt.plot(ativos_problematicos_pj.index, ativos_problematicos_pj[coluna], marker='o', linestyle='-', label = rotulos_series[i])
plt.title('Tendência Temporal Estoque \n Ativos Problemáticos - Pessoa Jurídica', fontsize=16)
plt.xlabel('Data', fontsize=14)
plt.ylabel('Ativos Problemáticos em Bilhões (R$)', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.legend(loc='upper left', bbox_to_anchor=(1, 0.75))
plt.show()
Estoque PJ¶
# Concatena os DataFrames carteira_credito_pj, indexadores_pj, risco_da_operacao_pj, inadimplencia_pj e ativos_problematicos_pj ao longo do eixo das colunas (axis=1)
estoque_pj = pd.concat([carteira_credito_pj, estoque_indexadores_pf,risco_da_operacao_pj, inadimplencia_pj, ativos_problematicos_pj], axis=1)
# Adiciona PJ ao início do nome das colunas para sinalizar Pessoa Jurídica
estoque_pj.columns = estoque_pj.columns + '_PJ'
print(estoque_pj.columns)
Index(['Estoque_Carteira_FGTS_PJ', 'Estoque_Carteira_Comercial_PJ',
'Estoque_Carteira_Livre_PJ', 'Estoque_Carteira_SFH_PJ',
'Estoque_Prefixado_PJ', 'Estoque_IPCA_PJ', 'Estoque_Outros_PJ',
'Estoque_TR_PJ', 'Estoque_Risco_AA_PJ', 'Estoque_Risco_A_PJ',
'Estoque_Risco_B_PJ', 'Estoque_Risco_C_PJ',
'Estoque_Risco_D ou mais_PJ', 'Estoque_SFH_PJ', 'Estoque_Livre_PJ',
'Estoque_FGTS_PJ', 'Estoque_Comercial_PJ', 'Estoque_AP_SFH_PJ',
'Estoque_AP_Comercial_PJ', 'Estoque_AP_Livre_PJ'],
dtype='object')
Estoque PF + Estoque PJ¶
# Merge dos DataFrames estoque_pf e estoque_pj
estoque = pd.merge(estoque_pf, estoque_pj, how='inner', on='DateTime')
# Converter índice para datetime
estoque.index = pd.to_datetime(estoque.index)
# Imprime as informações do DataFrame
print(estoque.info())
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30 Data columns (total 47 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Estoque_Carteira_Comercial_PF 109 non-null float64 1 Estoque_Carteira_Home Equity_PF 109 non-null float64 2 Estoque_Carteira_Livre_PF 109 non-null float64 3 Estoque_Carteira_FGTS_PF 109 non-null float64 4 Estoque_Carteira_SFH_PF 109 non-null float64 5 Estoque_Prefixado_PF 109 non-null float64 6 Estoque_IPCA_PF 94 non-null float64 7 Estoque_Outros_PF 109 non-null float64 8 Estoque_TR_PF 109 non-null float64 9 Estoque_Risco_AA_PF 109 non-null float64 10 Estoque_Risco_A_PF 109 non-null float64 11 Estoque_Risco_B_PF 109 non-null float64 12 Estoque_Risco_C_PF 109 non-null float64 13 Estoque_Risco_D ou mais_PF 109 non-null float64 14 Estoque_Home Equity_PF 109 non-null float64 15 Estoque_Livre_PF 109 non-null float64 16 Estoque_FGTS_PF 109 non-null float64 17 Estoque_Comercial_PF 109 non-null float64 18 Estoque_AP_Home Equity_PF 109 non-null float64 19 Estoque_AP_Livre_PF 109 non-null float64 20 Estoque_AP_SFH_PF 109 non-null float64 21 Estoque_AP_FGTS_PF 109 non-null float64 22 Estoque_VPP_Home Equity_PF 86 non-null float64 23 Estoque_VPP_SFH_PF 86 non-null float64 24 Estoque_VPP_Livre_PF 86 non-null float64 25 Estoque_VPP_FGTS_PF 86 non-null float64 26 Estoque_VPP_Comercial_PF 86 non-null float64 27 Estoque_Carteira_FGTS_PJ 109 non-null float64 28 Estoque_Carteira_Comercial_PJ 109 non-null float64 29 Estoque_Carteira_Livre_PJ 109 non-null float64 30 Estoque_Carteira_SFH_PJ 109 non-null float64 31 Estoque_Prefixado_PJ 109 non-null float64 32 Estoque_IPCA_PJ 94 non-null float64 33 Estoque_Outros_PJ 109 non-null float64 34 Estoque_TR_PJ 109 non-null float64 35 Estoque_Risco_AA_PJ 109 non-null float64 36 Estoque_Risco_A_PJ 109 non-null float64 37 Estoque_Risco_B_PJ 109 non-null float64 38 Estoque_Risco_C_PJ 109 non-null float64 39 Estoque_Risco_D ou mais_PJ 109 non-null float64 40 Estoque_SFH_PJ 109 non-null float64 41 Estoque_Livre_PJ 109 non-null float64 42 Estoque_FGTS_PJ 109 non-null float64 43 Estoque_Comercial_PJ 105 non-null float64 44 Estoque_AP_SFH_PJ 109 non-null float64 45 Estoque_AP_Comercial_PJ 109 non-null float64 46 Estoque_AP_Livre_PJ 109 non-null float64 dtypes: float64(47) memory usage: 40.9 KB None
# Imprime as primeiras linhas do DataFrame
print(estoque.head())
Estoque_Carteira_Comercial_PF Estoque_Carteira_Home Equity_PF \
DateTime
2014-04-30 0.561784 10.320047
2014-05-31 0.600306 10.435072
2014-06-30 0.637257 11.825104
2014-07-31 0.683327 11.876517
2014-08-31 0.730228 11.899535
Estoque_Carteira_Livre_PF Estoque_Carteira_FGTS_PF \
DateTime
2014-04-30 57.276878 122.111077
2014-05-31 58.900783 124.038891
2014-06-30 60.223755 126.202763
2014-07-31 61.598601 136.546497
2014-08-31 63.060569 139.276953
Estoque_Carteira_SFH_PF Estoque_Prefixado_PF Estoque_IPCA_PF \
DateTime
2014-04-30 180.260926 4.140248 NaN
2014-05-31 184.983631 4.120013 NaN
2014-06-30 189.154130 5.331555 NaN
2014-07-31 185.466386 5.315693 NaN
2014-08-31 189.323693 5.260145 NaN
Estoque_Outros_PF Estoque_TR_PF Estoque_Risco_AA_PF ... \
DateTime ...
2014-04-30 0.829092 365.561372 48.05 ...
2014-05-31 0.880421 373.958250 46.86 ...
2014-06-30 0.934741 381.776713 45.70 ...
2014-07-31 0.947161 389.908475 44.83 ...
2014-08-31 0.931660 398.099174 47.63 ...
Estoque_Risco_B_PJ Estoque_Risco_C_PJ \
DateTime
2014-04-30 17.36 9.35
2014-05-31 18.64 9.02
2014-06-30 17.97 8.92
2014-07-31 18.18 8.74
2014-08-31 18.31 8.82
Estoque_Risco_D ou mais_PJ Estoque_SFH_PJ Estoque_Livre_PJ \
DateTime
2014-04-30 1.43 0.28 0.57
2014-05-31 1.34 0.32 0.58
2014-06-30 1.30 0.23 0.74
2014-07-31 1.11 0.16 0.56
2014-08-31 1.06 0.17 0.72
Estoque_FGTS_PJ Estoque_Comercial_PJ Estoque_AP_SFH_PJ \
DateTime
2014-04-30 0.12 0.01 0.288959
2014-05-31 0.50 0.01 0.303304
2014-06-30 0.78 0.01 0.262386
2014-07-31 0.69 NaN 0.243681
2014-08-31 0.81 NaN 0.249512
Estoque_AP_Comercial_PJ Estoque_AP_Livre_PJ
DateTime
2014-04-30 0.058625 0.159882
2014-05-31 0.054316 0.196617
2014-06-30 0.044129 0.230506
2014-07-31 0.044326 0.210054
2014-08-31 0.041545 0.266968
[5 rows x 47 columns]
Índices¶
Imobiliário PIB¶
Porcentagem ao Mês
# Ler o arquivo CSV referente ao Imobiliário PIB com ponto e vírgula como delimitador
imobiliario_pib = pd.read_csv('imobiliario_pib.csv', delimiter=';', skipinitialspace=True)
# Renomeia a coluna Unnamed: 1 para Imobiliario_PIB
imobiliario_pib['Imobiliario_PIB'] = imobiliario_pib['Unnamed: 1']
# Retira a coluna Unnamed: 1
imobiliario_pib = imobiliario_pib.drop(columns= ['Unnamed: 1'])
# Define DateTime como índice
imobiliario_pib.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
imobiliario_pib.index = pd.to_datetime(imobiliario_pib.index)
Índice Valores de Garantia¶
# Ler o arquivo CSV referente ao Índice Valores de Garantia com ponto e vírgula como delimitador
ind_valores_garantia = pd.read_csv('ind_valores_garantia.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
ind_valores_garantia.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
ind_valores_garantia.index = pd.to_datetime(ind_valores_garantia.index)
# Cria uma nova coluna chamada "Indice_Valores_de_Garantia" e copia os valores da coluna "Unnamed: 1" para ela
ind_valores_garantia['Indice_Valores_de_Garantia'] = ind_valores_garantia['Unnamed: 1']
# Retira a coluna Unnamed: 1
ind_valores_garantia = ind_valores_garantia.drop(columns=['Unnamed: 1'])
Mediana Valores de Garantia¶
Em milhares de R$
# Ler o arquivo CSV referente à Mediana Valores de Garantia com ponto e vírgula como delimitador
med_valores_garantia = pd.read_csv('mediana_valores_garantia.csv', delimiter=';', skipinitialspace=True)
# Define DateTime como índice
med_valores_garantia.set_index('DateTime', inplace=True, drop=True)
# Converter Índice para datetime
med_valores_garantia.index = pd.to_datetime(med_valores_garantia.index)
# Cria uma nova coluna chamada "Mediana_Valores_de_Garantia" e copia os valores da coluna "Unnamed: 1" para ela
med_valores_garantia['Mediana_Valores_de_Garantia'] = med_valores_garantia['Unnamed: 1']
# Retira a coluna Unnamed: 1
med_valores_garantia = med_valores_garantia.drop(columns=['Unnamed: 1'])
# Converter colunas para float
med_valores_garantia = med_valores_garantia.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Merge dos DataFrames ind_valores_garantia e med_valores_garantia
valores_garantia = pd.merge(ind_valores_garantia, med_valores_garantia, how='inner', on='DateTime')
# Merge dos DataFrames valores_garantia e imobiliario_pib
indices = pd.merge(valores_garantia, imobiliario_pib, how='inner', on='DateTime')
# Converter índice para datetime
indices.index = pd.to_datetime(indices.index)
# Converter colunas para float
indices = indices.apply(lambda x: x.str.replace(',', '.').astype(float) if x.dtype == 'object' else x)
# Imprime as informações do DataFrame
print(indices.info())
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Indice_Valores_de_Garantia 109 non-null float64 1 Mediana_Valores_de_Garantia 109 non-null int64 2 Imobiliario_PIB 109 non-null float64 dtypes: float64(2), int64(1) memory usage: 3.4 KB None
# Imprime as primeiras linhas do DataFrame
print(indices.head())
Indice_Valores_de_Garantia Mediana_Valores_de_Garantia \
DateTime
2014-04-30 537.93 148008
2014-05-31 540.55 148539
2014-06-30 542.87 145000
2014-07-31 544.89 145000
2014-08-31 546.62 145000
Imobiliario_PIB
DateTime
2014-04-30 7.48
2014-05-31 7.60
2014-06-30 7.72
2014-07-31 7.84
2014-08-31 7.95
# Imprime as últimas linhas do DataFrame
print(indices.tail())
Indice_Valores_de_Garantia Mediana_Valores_de_Garantia \
DateTime
2022-12-31 647.63 225000
2023-01-31 647.49 230000
2023-02-28 647.33 230000
2023-03-31 647.16 240000
2023-04-30 646.98 235000
Imobiliario_PIB
DateTime
2022-12-31 9.74
2023-01-31 9.74
2023-02-28 9.75
2023-03-31 9.79
2023-04-30 9.82
indices.describe()
| Indice_Valores_de_Garantia | Mediana_Valores_de_Garantia | Imobiliario_PIB | |
|---|---|---|---|
| count | 109.000000 | 109.000000 | 109.000000 |
| mean | 567.160367 | 178479.174312 | 9.247615 |
| std | 46.654058 | 30849.423003 | 0.487744 |
| min | 520.780000 | 145000.000000 | 7.480000 |
| 25% | 529.770000 | 155000.000000 | 9.100000 |
| 50% | 547.030000 | 165000.000000 | 9.410000 |
| 75% | 610.300000 | 210000.000000 | 9.560000 |
| max | 648.120000 | 250000.000000 | 9.820000 |
estatisticas_indices = indices.select_dtypes(include=['float64']).apply(calcula_estat)
print(estatisticas_indices)
Indice_Valores_de_Garantia Imobiliario_PIB Média 567.160367 9.247615 Mediana 547.030000 9.410000 Moda 647.910000 9.470000 Desvio Padrão (populacional) 46.439556 0.485502 Desvio Padrão (amostral) 46.654058 0.487744 Variância (populacional) 2156.632354 0.235712 Variância (amostral) 2176.601172 0.237894 Coeficiente de Variação 8.225902 5.274269
categorias = ['Imobiliário PIB', 'Índice Valores de Garantia', 'Mediana Valores de Garantia']
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))
for i, column in enumerate(indices.columns):
indices.boxplot(column=column, ax=axes[i], grid=False)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Defina as categorias como título de cada boxplot
axes[i].set_title(categorias[i], fontsize=14)
# Remova o eixo x (legenda na parte inferior)
axes[i].xaxis.set_ticks([])
# Adicione o título geral
plt.suptitle("Índices", fontsize=16, fontweight='bold')
plt.tight_layout()
plt.show()
import seaborn as sns
correlacao = sns.heatmap(indices.corr(), annot=True, cmap='Reds')
correlacao.set_title('Correlação entre os Índices\n', fontsize=16, fontweight='bold')
# Definir os rótulos dos eixos x e y usando as categorias
categorias = indices.columns.str.replace('_', ' ')
correlacao.set_xticklabels(categorias, rotation=45)
correlacao.set_yticklabels(categorias, rotation=0)
plt.show()
Dataframe Completo¶
# Concatena os DataFrames recursos, direcionamento, contabil, credito, estoque e indices ao longo do eixo das colunas (axis=1)
df = pd.concat([recursos, direcionamento, contabil, credito, estoque, indices], axis = 1)
# Imprime as informações do DataFrame
print(df.info())
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30 Freq: M Data columns (total 94 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 SBPE 109 non-null float64 1 LCI 109 non-null float64 2 CRI 109 non-null float64 3 LIG 54 non-null float64 4 LH 102 non-null float64 5 Direcionamento_Aplicacao 109 non-null float64 6 Direcionamento_Aquisicao 109 non-null float64 7 Direcionamento_Construcao 109 non-null float64 8 Direcionamento_Reforma_Ampliacao 52 non-null float64 9 Financiamento_Comercial 81 non-null float64 10 Financiamento_Residencial 81 non-null float64 11 BNDU_Imobiliário 81 non-null float64 12 VC_Comercial_PF 109 non-null float64 13 VC_Home Equity_PF 109 non-null float64 14 VC_Livre_PF 109 non-null float64 15 VC_FGTS_PF 109 non-null float64 16 VC_SFH_PF 109 non-null float64 17 Credito_Prefixado_PF 109 non-null float64 18 Credito_IPCA_PF 90 non-null float64 19 Credito_Outros_PF 109 non-null float64 20 Credito_TR_PF 109 non-null float64 21 Credito_Taxa_SFH_PF 109 non-null float64 22 Credito_Taxa_FGTS_PF 109 non-null float64 23 Credito_Taxa_Livre_PF 109 non-null float64 24 Credito_Taxa_Comercial_PF 109 non-null float64 25 Credito_Taxa_Home Equity_PF 109 non-null float64 26 Credito_LTV_SFH_PF 109 non-null float64 27 Credito_LTV_FGTS_PF 109 non-null float64 28 Credito_LTV_Livre_PF 109 non-null float64 29 Credito_LTV_Comercial_PF 109 non-null float64 30 Credito_LTV_Home Equity_PF 109 non-null float64 31 VC_Comercial_PJ 109 non-null float64 32 VC_FGTS_PJ 109 non-null float64 33 VC_Livre_PJ 109 non-null float64 34 VC_SFH_PJ 109 non-null float64 35 Credito_IPCA_PJ 8 non-null float64 36 Credito_Outros_PJ 49 non-null float64 37 Credito_CDI_PJ 53 non-null float64 38 Credito_Prefixado_PJ 95 non-null float64 39 Credito_TR_PJ 109 non-null float64 40 Credito_SFH_PJ 109 non-null float64 41 Credito_FGTS_PJ 109 non-null float64 42 Credito_Livre_PJ 109 non-null float64 43 Credito_Comercial_PJ 109 non-null float64 44 Estoque_Carteira_Comercial_PF 109 non-null float64 45 Estoque_Carteira_Home Equity_PF 109 non-null float64 46 Estoque_Carteira_Livre_PF 109 non-null float64 47 Estoque_Carteira_FGTS_PF 109 non-null float64 48 Estoque_Carteira_SFH_PF 109 non-null float64 49 Estoque_Prefixado_PF 109 non-null float64 50 Estoque_IPCA_PF 94 non-null float64 51 Estoque_Outros_PF 109 non-null float64 52 Estoque_TR_PF 109 non-null float64 53 Estoque_Risco_AA_PF 109 non-null float64 54 Estoque_Risco_A_PF 109 non-null float64 55 Estoque_Risco_B_PF 109 non-null float64 56 Estoque_Risco_C_PF 109 non-null float64 57 Estoque_Risco_D ou mais_PF 109 non-null float64 58 Estoque_Home Equity_PF 109 non-null float64 59 Estoque_Livre_PF 109 non-null float64 60 Estoque_FGTS_PF 109 non-null float64 61 Estoque_Comercial_PF 109 non-null float64 62 Estoque_AP_Home Equity_PF 109 non-null float64 63 Estoque_AP_Livre_PF 109 non-null float64 64 Estoque_AP_SFH_PF 109 non-null float64 65 Estoque_AP_FGTS_PF 109 non-null float64 66 Estoque_VPP_Home Equity_PF 86 non-null float64 67 Estoque_VPP_SFH_PF 86 non-null float64 68 Estoque_VPP_Livre_PF 86 non-null float64 69 Estoque_VPP_FGTS_PF 86 non-null float64 70 Estoque_VPP_Comercial_PF 86 non-null float64 71 Estoque_Carteira_FGTS_PJ 109 non-null float64 72 Estoque_Carteira_Comercial_PJ 109 non-null float64 73 Estoque_Carteira_Livre_PJ 109 non-null float64 74 Estoque_Carteira_SFH_PJ 109 non-null float64 75 Estoque_Prefixado_PJ 109 non-null float64 76 Estoque_IPCA_PJ 94 non-null float64 77 Estoque_Outros_PJ 109 non-null float64 78 Estoque_TR_PJ 109 non-null float64 79 Estoque_Risco_AA_PJ 109 non-null float64 80 Estoque_Risco_A_PJ 109 non-null float64 81 Estoque_Risco_B_PJ 109 non-null float64 82 Estoque_Risco_C_PJ 109 non-null float64 83 Estoque_Risco_D ou mais_PJ 109 non-null float64 84 Estoque_SFH_PJ 109 non-null float64 85 Estoque_Livre_PJ 109 non-null float64 86 Estoque_FGTS_PJ 109 non-null float64 87 Estoque_Comercial_PJ 105 non-null float64 88 Estoque_AP_SFH_PJ 109 non-null float64 89 Estoque_AP_Comercial_PJ 109 non-null float64 90 Estoque_AP_Livre_PJ 109 non-null float64 91 Indice_Valores_de_Garantia 109 non-null float64 92 Mediana_Valores_de_Garantia 109 non-null int64 93 Imobiliario_PIB 109 non-null float64 dtypes: float64(93), int64(1) memory usage: 80.9 KB None
# Eliminar Espaço no nome das colunas
for col in df.columns:
if 'Home Equity' in col:
novo_nome_coluna = col.replace(' ', '_') # Substitui espaços por sublinhados
df = df.rename(columns={col: novo_nome_coluna})
# print(df.columns)
df.describe()
| SBPE | LCI | CRI | LIG | LH | Direcionamento_Aplicacao | Direcionamento_Aquisicao | Direcionamento_Construcao | Direcionamento_Reforma_Ampliacao | Financiamento_Comercial | ... | Estoque_SFH_PJ | Estoque_Livre_PJ | Estoque_FGTS_PJ | Estoque_Comercial_PJ | Estoque_AP_SFH_PJ | Estoque_AP_Comercial_PJ | Estoque_AP_Livre_PJ | Indice_Valores_de_Garantia | Mediana_Valores_de_Garantia | Imobiliario_PIB | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 109.000000 | 109.000000 | 109.000000 | 54.000000 | 102.000000 | 109.000000 | 109.000000 | 109.000000 | 52.000000 | 81.000000 | ... | 109.000000 | 109.000000 | 109.000000 | 105.000000 | 109.000000 | 109.000000 | 109.000000 | 109.000000 | 109.000000 | 109.000000 |
| mean | 622.113425 | 164.422881 | 79.217958 | 34.803963 | 0.958290 | 464.025662 | 533.736825 | 42.947682 | 564.759796 | 2.038938 | ... | 3.364128 | 5.996789 | 1.470367 | 2.535238 | 1.224035 | 1.485780 | 3.056549 | 567.160367 | 178479.174312 | 9.247615 |
| std | 114.726873 | 34.003273 | 25.957792 | 29.890667 | 0.351409 | 81.798012 | 168.306809 | 17.347505 | 41.636823 | 0.435597 | ... | 3.205572 | 7.457258 | 0.882337 | 2.438189 | 0.840675 | 1.224140 | 1.868412 | 46.654058 | 30849.423003 | 0.487744 |
| min | 480.464917 | 114.102520 | 40.795547 | 0.177202 | 0.018120 | 325.585144 | 270.757417 | 19.255190 | 512.119403 | 1.292407 | ... | 0.060000 | 0.420000 | 0.120000 | 0.000000 | 0.168163 | 0.002799 | 0.159882 | 520.780000 | 145000.000000 | 7.480000 |
| 25% | 510.620427 | 137.750671 | 65.419271 | 11.308063 | 0.925513 | 387.192224 | 393.501215 | 29.165905 | 528.116359 | 1.678244 | ... | 0.600000 | 1.450000 | 0.740000 | 0.260000 | 0.401197 | 0.596731 | 1.059223 | 529.770000 | 155000.000000 | 9.100000 |
| 50% | 599.508867 | 165.544869 | 73.005338 | 21.926618 | 1.061776 | 452.574064 | 485.512991 | 36.337262 | 555.566737 | 2.092106 | ... | 2.070000 | 2.920000 | 1.320000 | 1.920000 | 1.271253 | 1.224052 | 3.595104 | 547.030000 | 165000.000000 | 9.410000 |
| 75% | 757.535898 | 183.879294 | 81.616554 | 56.932670 | 1.116405 | 516.834464 | 652.302756 | 53.741841 | 600.540329 | 2.403230 | ... | 5.350000 | 9.430000 | 2.130000 | 4.140000 | 1.877639 | 2.341957 | 4.736214 | 610.300000 | 210000.000000 | 9.560000 |
| max | 801.437986 | 284.425993 | 151.744832 | 97.786173 | 1.494045 | 618.514193 | 876.639352 | 82.898815 | 645.239690 | 2.725520 | ... | 11.720000 | 40.290000 | 4.390000 | 9.690000 | 2.667923 | 4.043584 | 5.789070 | 648.120000 | 250000.000000 | 9.820000 |
8 rows × 94 columns
# Eliminar colunas com apenas valores nulos
df = df.dropna(axis=1, how='all')
# Imprime as informações do DataFrame
print(df.info())
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 109 entries, 2014-04-30 to 2023-04-30 Freq: M Data columns (total 94 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 SBPE 109 non-null float64 1 LCI 109 non-null float64 2 CRI 109 non-null float64 3 LIG 54 non-null float64 4 LH 102 non-null float64 5 Direcionamento_Aplicacao 109 non-null float64 6 Direcionamento_Aquisicao 109 non-null float64 7 Direcionamento_Construcao 109 non-null float64 8 Direcionamento_Reforma_Ampliacao 52 non-null float64 9 Financiamento_Comercial 81 non-null float64 10 Financiamento_Residencial 81 non-null float64 11 BNDU_Imobiliário 81 non-null float64 12 VC_Comercial_PF 109 non-null float64 13 VC_Home_Equity_PF 109 non-null float64 14 VC_Livre_PF 109 non-null float64 15 VC_FGTS_PF 109 non-null float64 16 VC_SFH_PF 109 non-null float64 17 Credito_Prefixado_PF 109 non-null float64 18 Credito_IPCA_PF 90 non-null float64 19 Credito_Outros_PF 109 non-null float64 20 Credito_TR_PF 109 non-null float64 21 Credito_Taxa_SFH_PF 109 non-null float64 22 Credito_Taxa_FGTS_PF 109 non-null float64 23 Credito_Taxa_Livre_PF 109 non-null float64 24 Credito_Taxa_Comercial_PF 109 non-null float64 25 Credito_Taxa_Home_Equity_PF 109 non-null float64 26 Credito_LTV_SFH_PF 109 non-null float64 27 Credito_LTV_FGTS_PF 109 non-null float64 28 Credito_LTV_Livre_PF 109 non-null float64 29 Credito_LTV_Comercial_PF 109 non-null float64 30 Credito_LTV_Home_Equity_PF 109 non-null float64 31 VC_Comercial_PJ 109 non-null float64 32 VC_FGTS_PJ 109 non-null float64 33 VC_Livre_PJ 109 non-null float64 34 VC_SFH_PJ 109 non-null float64 35 Credito_IPCA_PJ 8 non-null float64 36 Credito_Outros_PJ 49 non-null float64 37 Credito_CDI_PJ 53 non-null float64 38 Credito_Prefixado_PJ 95 non-null float64 39 Credito_TR_PJ 109 non-null float64 40 Credito_SFH_PJ 109 non-null float64 41 Credito_FGTS_PJ 109 non-null float64 42 Credito_Livre_PJ 109 non-null float64 43 Credito_Comercial_PJ 109 non-null float64 44 Estoque_Carteira_Comercial_PF 109 non-null float64 45 Estoque_Carteira_Home_Equity_PF 109 non-null float64 46 Estoque_Carteira_Livre_PF 109 non-null float64 47 Estoque_Carteira_FGTS_PF 109 non-null float64 48 Estoque_Carteira_SFH_PF 109 non-null float64 49 Estoque_Prefixado_PF 109 non-null float64 50 Estoque_IPCA_PF 94 non-null float64 51 Estoque_Outros_PF 109 non-null float64 52 Estoque_TR_PF 109 non-null float64 53 Estoque_Risco_AA_PF 109 non-null float64 54 Estoque_Risco_A_PF 109 non-null float64 55 Estoque_Risco_B_PF 109 non-null float64 56 Estoque_Risco_C_PF 109 non-null float64 57 Estoque_Risco_D ou mais_PF 109 non-null float64 58 Estoque_Home_Equity_PF 109 non-null float64 59 Estoque_Livre_PF 109 non-null float64 60 Estoque_FGTS_PF 109 non-null float64 61 Estoque_Comercial_PF 109 non-null float64 62 Estoque_AP_Home_Equity_PF 109 non-null float64 63 Estoque_AP_Livre_PF 109 non-null float64 64 Estoque_AP_SFH_PF 109 non-null float64 65 Estoque_AP_FGTS_PF 109 non-null float64 66 Estoque_VPP_Home_Equity_PF 86 non-null float64 67 Estoque_VPP_SFH_PF 86 non-null float64 68 Estoque_VPP_Livre_PF 86 non-null float64 69 Estoque_VPP_FGTS_PF 86 non-null float64 70 Estoque_VPP_Comercial_PF 86 non-null float64 71 Estoque_Carteira_FGTS_PJ 109 non-null float64 72 Estoque_Carteira_Comercial_PJ 109 non-null float64 73 Estoque_Carteira_Livre_PJ 109 non-null float64 74 Estoque_Carteira_SFH_PJ 109 non-null float64 75 Estoque_Prefixado_PJ 109 non-null float64 76 Estoque_IPCA_PJ 94 non-null float64 77 Estoque_Outros_PJ 109 non-null float64 78 Estoque_TR_PJ 109 non-null float64 79 Estoque_Risco_AA_PJ 109 non-null float64 80 Estoque_Risco_A_PJ 109 non-null float64 81 Estoque_Risco_B_PJ 109 non-null float64 82 Estoque_Risco_C_PJ 109 non-null float64 83 Estoque_Risco_D ou mais_PJ 109 non-null float64 84 Estoque_SFH_PJ 109 non-null float64 85 Estoque_Livre_PJ 109 non-null float64 86 Estoque_FGTS_PJ 109 non-null float64 87 Estoque_Comercial_PJ 105 non-null float64 88 Estoque_AP_SFH_PJ 109 non-null float64 89 Estoque_AP_Comercial_PJ 109 non-null float64 90 Estoque_AP_Livre_PJ 109 non-null float64 91 Indice_Valores_de_Garantia 109 non-null float64 92 Mediana_Valores_de_Garantia 109 non-null int64 93 Imobiliario_PIB 109 non-null float64 dtypes: float64(93), int64(1) memory usage: 80.9 KB None
df.columns[41:]
Index(['Credito_FGTS_PJ', 'Credito_Livre_PJ', 'Credito_Comercial_PJ',
'Estoque_Carteira_Comercial_PF', 'Estoque_Carteira_Home_Equity_PF',
'Estoque_Carteira_Livre_PF', 'Estoque_Carteira_FGTS_PF',
'Estoque_Carteira_SFH_PF', 'Estoque_Prefixado_PF', 'Estoque_IPCA_PF',
'Estoque_Outros_PF', 'Estoque_TR_PF', 'Estoque_Risco_AA_PF',
'Estoque_Risco_A_PF', 'Estoque_Risco_B_PF', 'Estoque_Risco_C_PF',
'Estoque_Risco_D ou mais_PF', 'Estoque_Home_Equity_PF',
'Estoque_Livre_PF', 'Estoque_FGTS_PF', 'Estoque_Comercial_PF',
'Estoque_AP_Home_Equity_PF', 'Estoque_AP_Livre_PF', 'Estoque_AP_SFH_PF',
'Estoque_AP_FGTS_PF', 'Estoque_VPP_Home_Equity_PF',
'Estoque_VPP_SFH_PF', 'Estoque_VPP_Livre_PF', 'Estoque_VPP_FGTS_PF',
'Estoque_VPP_Comercial_PF', 'Estoque_Carteira_FGTS_PJ',
'Estoque_Carteira_Comercial_PJ', 'Estoque_Carteira_Livre_PJ',
'Estoque_Carteira_SFH_PJ', 'Estoque_Prefixado_PJ', 'Estoque_IPCA_PJ',
'Estoque_Outros_PJ', 'Estoque_TR_PJ', 'Estoque_Risco_AA_PJ',
'Estoque_Risco_A_PJ', 'Estoque_Risco_B_PJ', 'Estoque_Risco_C_PJ',
'Estoque_Risco_D ou mais_PJ', 'Estoque_SFH_PJ', 'Estoque_Livre_PJ',
'Estoque_FGTS_PJ', 'Estoque_Comercial_PJ', 'Estoque_AP_SFH_PJ',
'Estoque_AP_Comercial_PJ', 'Estoque_AP_Livre_PJ',
'Indice_Valores_de_Garantia', 'Mediana_Valores_de_Garantia',
'Imobiliario_PIB'],
dtype='object')
# Salvando o DataFrame em um arquivo Excel
df.to_excel('inf_mercado_imobiliario.xlsx', index=False)
# Salvando o DataFrame em um arquivo CSV
df.to_csv('inf_mercado_imobiliario.csv', sep=';', index=False)
Dicionário de Dados¶
dicionario_imobiliario = {
'SBPE': 'Sistema Brasileiro de Poupança e Empréstimo',
'LCI': 'Letra de Crédito Imobiliário',
'CRI': 'Certificado de Recebíveis Imobiliários',
'LIG': 'Letra Imobiliária Garantida',
'LH': 'Letra Hipotecária',
'Direcionamento_Aplicacao': 'Aplicações em créditos imobiliários - Aplicação',
'Direcionamento_Aquisicao': 'Aplicações em créditos imobiliários - Aquisição',
'Direcionamento_Construcao': 'Aplicações em créditos imobiliários - Construção',
'Direcionamento_Reforma_Ampliacao': 'Aplicações em créditos imobiliários - Reforma/Ampliação',
'Financiamento_Comercial': 'Financiamento Comercial',
'Financiamento_Residencial': 'Financiamento Residencial',
'BNDU_Imobiliário': 'Bens não de uso próprio (BNDU) Imobiliário',
'Imobiliario_PIB': 'Imobiliário/PIB',
'Indice_Valores_de_Garantia': 'Índice de Valores de Garantia',
'Mediana_Valores_de_Garantia': 'Mediana dos Valores de Garantia',
'VC_Comercial_PF': 'Valor Contratado - Comercial (Pessoa Física)',
'VC_Home_Equity_PF': 'Valor Contratado - Home Equity (Pessoa Física)',
'VC_Livre_PF': 'Valor Contratado - Livre (Pessoa Física)',
'VC_FGTS_PF': 'Valor Contratado - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Física)',
'VC_SFH_PF': 'Valor Contratado - SFH (Sistema Financeiro de Habitação) (Pessoa Física)',
'Credito_Prefixado_PF': 'Crédito - Prefixado (Pessoa Física)',
'Credito_IPCA_PF': 'Crédito - IPCA (Pessoa Física)',
'Credito_Outros_PF': 'Crédito - Outros (Pessoa Física)',
'Credito_TR_PF': 'Crédito - Taxa Referencial (TR) (Pessoa Física)',
'Credito_Taxa_SFH_PF': 'Crédito - Taxa SFH (Pessoa Física)',
'Credito_Taxa_FGTS_PF': 'Crédito - Taxa FGTS (Pessoa Física)',
'Credito_Taxa_Livre_PF': 'Crédito - Taxa Livre (Pessoa Física)',
'Credito_Taxa_Comercial_PF': 'Crédito - Taxa Comercial (Pessoa Física)',
'Credito_Taxa_Home_Equity_PF': 'Crédito - Taxa Home Equity (Pessoa Física)',
'Credito_LTV_SFH_PF': 'Crédito - LTV SFH (Pessoa Física)',
'Credito_LTV_FGTS_PF': 'Crédito - LTV FGTS (Pessoa Física)',
'Credito_LTV_Livre_PF': 'Crédito - LTV Livre (Pessoa Física)',
'Credito_LTV_Comercial_PF': 'Crédito - LTV Comercial (Pessoa Física)',
'Credito_LTV_Home Equity_PF': 'Crédito - LTV Home Equity (Pessoa Física)',
'VC_Comercial_PJ': 'Valor Contratado - Comercial (Pessoa Jurídica)',
'VC_FGTS_PJ': 'Valor Contratado - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Jurídica)',
'VC_Livre_PJ': 'Valor Contratado - Livre (Pessoa Jurídica)',
'VC_SFH_PJ': 'Valor Contratado - SFH (Sistema Financeiro de Habitação) (Pessoa Jurídica)',
'Credito_Prefixado_PJ': 'Crédito - Prefixado (Pessoa Jurídica)',
'Credito_IPCA_PJ': 'Crédito - IPCA (Pessoa Jurídica)',
'Credito_Outros_PJ': 'Crédito - Outros (Pessoa Jurídica)',
'Credito_TR_PJ': 'Crédito - Taxa Referencial (TR) (Pessoa Jurídica)',
'Credito_SFH_PJ': 'Crédito - SFH (Sistema Financeiro de Habitação) (Pessoa Jurídica)',
'Credito_FGTS_PJ': 'Crédito - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Jurídica)',
'Credito_Livre_PJ': 'Crédito - Livre (Pessoa Jurídica)',
'Credito_Comercial_PJ': 'Crédito - Comercial (Pessoa Jurídica)',
'Estoque_Carteira_Comercial_PF': 'Estoque - Carteira Comercial (Pessoa Física)',
'Estoque_Carteira_Home_Equity_PF': 'Estoque - Carteira Home Equity (Pessoa Física)',
'Estoque_Carteira_Livre_PF': 'Estoque - Carteira Livre (Pessoa Física)',
'Estoque_Carteira_FGTS_PF': 'Estoque - Carteira FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Física)',
'Estoque_Carteira_SFH_PF': 'Estoque - Carteira SFH (Sistema Financeiro de Habitação) (Pessoa Física)',
'Credito_Prefixado_PF': 'Crédito - Prefixado (Pessoa Física)',
'Credito_IPCA_PF': 'Crédito - IPCA (Pessoa Física)',
'Credito_Outros_PF': 'Crédito - Outros (Pessoa Física)',
'Credito_TR_PF': 'Crédito - Taxa Referencial (TR) (Pessoa Física)',
'Estoque_Risco_AA_PF': 'Estoque - Risco de Crédito AA (Pessoa Física)',
'Estoque_Risco_A_PF': 'Estoque - Risco de Crédito A (Pessoa Física)',
'Estoque_Risco_B_PF': 'Estoque - Risco de Crédito B (Pessoa Física)',
'Estoque_Risco_C_PF': 'Estoque - Risco de Crédito C (Pessoa Física)',
'Estoque_Risco_D ou mais_PF': 'Estoque - Risco de Crédito D ou mais (Pessoa Física)',
'Estoque_Home_Equity_PF': 'Estoque - Home Equity (Pessoa Física)',
'Estoque_Livre_PF': 'Estoque - Livre (Pessoa Física)',
'Estoque_FGTS_PF': 'Estoque - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Física)',
'Estoque_Comercial_PF': 'Estoque - Comercial (Pessoa Física)',
'Estoque_AP_Home_Equity_PF': 'Estoque - Ativos Problemáticos - Home Equity (Pessoa Física)',
'Estoque_AP_Livre_PF': 'Estoque - Ativos Problemáticos - Livre (Pessoa Física)',
'Estoque_AP_SFH_PF': 'Estoque - Ativos Problemáticos - SFH (Sistema Financeiro de Habitação) (Pessoa Física)',
'Estoque_AP_FGTS_PF': 'Estoque - Ativos Problemáticos - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Física)',
'Estoque_VPP_Home_Equity_PF': 'Estoque - Valor da Próxima Parcela - Home Equity (Pessoa Física)',
'Estoque_VPP_SFH_PF': 'Estoque - Valor da Próxima Parcela - SFH (Sistema Financeiro de Habitação) (Pessoa Física)',
'Estoque_VPP_Livre_PF': 'Estoque - Valor da Próxima Parcela - Livre (Pessoa Física)',
'Estoque_VPP_FGTS_PF': 'Estoque - Valor da Próxima Parcela - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Física)',
'Estoque_VPP_Comercial_PF': 'Estoque - Valor da Próxima Parcela - Comercial (Pessoa Física)',
'Estoque_Carteira_FGTS_PJ': 'Estoque - Carteira FGTS (Pessoa Jurídica)',
'Estoque_Carteira_Comercial_PJ': 'Estoque - Carteira Comercial (Pessoa Jurídica)',
'Estoque_Carteira_Livre_PJ': 'Estoque - Carteira Livre (Pessoa Jurídica)',
'Estoque_Carteira_SFH_PJ': 'Estoque - Carteira SFH (Sistema Financeiro de Habitação) (Pessoa Jurídica)',
'Estoque_Prefixado_PJ': 'Estoque - Prefixado (Pessoa Jurídica)',
'Estoque_IPCA_PJ': 'Estoque - IPCA (Pessoa Jurídica)',
'Estoque_Outros_PJ': 'Estoque - Outros (Pessoa Jurídica)',
'Estoque_TR_PJ': 'Estoque - TR (Pessoa Jurídica)',
'Estoque_Risco_AA_PJ': 'Estoque - Risco de Crédito AA (Pessoa Jurídica)',
'Estoque_Risco_A_PJ': 'Estoque - Risco de Crédito A (Pessoa Jurídica)',
'Estoque_Risco_B_PJ': 'Estoque - Risco de Crédito B (Pessoa Jurídica)',
'Estoque_Risco_C_PJ': 'Estoque - Risco de Crédito C (Pessoa Jurídica)',
'Estoque_Risco_D ou mais_PJ': 'Estoque - Risco de Crédito D ou mais (Pessoa Jurídica)',
'Estoque_SFH_PJ': 'Estoque - SFH (Sistema Financeiro de Habitação) (Pessoa Jurídica)',
'Estoque_Livre_PJ': 'Estoque - Livre (Pessoa Jurídica)',
'Estoque_FGTS_PJ': 'Estoque - FGTS (Fundo de Garantia do Tempo de Serviço) (Pessoa Jurídica)',
'Estoque_Comercial_PJ': 'Estoque - Comercial (Pessoa Jurídica)',
'Estoque_AP_SFH_PJ': 'Estoque - Ativos Problemáticos - SFH (Sistema Financeiro de Habitação) (Pessoa Jurídica)',
'Estoque_AP_Comercial_PJ': 'Estoque - Ativos Problemáticos - Comercial (Pessoa Jurídica)',
'Estoque_AP_Livre_PJ': 'Estoque - Ativos Problemáticos - Livre (Pessoa Jurídica)'
}
# Salvar o DataFrame no arquivo Excel
dicionario_imobiliario.to_excel('dicionario_imobiliario.xlsx', index=False)